#11870·coolify

当 Service 中的 docker_compose_raw 为空 (getTopLevelNetworks 返回 null) 时,代理无法启动或重新启动

作者: basedbuilder创建于 2026年9月17日更新于 2026年9月17日

QQ 描述和错误消息

在非恒星服务器上,如果**% ** 服务在 “ docker compose raw” 中有一个空字符串, 该服务器上的每个代理启动和重新启动都会以“ TypeError” 失败 :

是DockerPregulatedNetwork (): 参数 #1(网络)必须是类型字符串, 无效,
电话:/var/www/html/bootstrap/helpers/proxy.php 在86号线上

其根源是`getToplevelNetworks ()' 不是一个总函数。

`bootstrap/ helpers/ shared.php:1582':

翻译: 函数获取 ToplevelNetworks( Service % 应用资源) { 如果( 资源- > getMorphClass ()) { 服务: class){ 如果( 资源- > docker compose raw) { / “' 是 falsy - > 身体跳过 . . . . . . . . 返回 $toplevelNetworks - > keys (); // 只返回此分支 {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? \ if (resource- > getMorphClass ()\ \ 应用程序: class) { . . . . . . . . 返回 $toplevelNetworks - > keys (); {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? } // 没有, 没有回落 。


对于一个`docker compose raw'是病态的服务部门,警卫内部的`返回'被跳出,控制从功能的尽头掉下来,因此它隐含地返回`null'。

在“收集DockerNetworksByServer()” (`proxy.php:55-60')中推出`null':

翻译:
每项 ($server- > services ()- > get () 为$ service) {
如果($service->isRunning ()) {
$networks - > push($ service->networks ());
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
$allNetworks->push($ service->networks ()); //无条件
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?

收集:平面() ' 附加非阵列项目逐字排列,因此null'存活了平面()'和unique()',并在proxy.php:86'和:89'时达到filter()'召回,它们称为isdockerPregulatedNetwork(string $network)'。 这是一个用户定义的函数上的不可变参数,因此PHP会提出"TypeError"而不是强制.

有两件事很难诊断:

  1. 确保ProxyNetworksExist ()'(proxy.php:146')称为DockerNetworks ByServer ()'** 在**isswarm ()'检查之前,它由RestartProxyJob:149'和StartProxy:80'合并。 因此代理机既不能重启,也不能启动——但API仍然响应,仿佛重启被排队,失败只出现在了Laravel日志中.
  2. 连接ProxyToNetworks()'在非swarm服务器上没有****被影响——它只在if ($server->isSwarm())'内称为collectDockerNetworksByServer()' (proxy.php:110'),否则就返回一个简单的外壳回路。 因此,`ConnectProxyToNetworksJob ' 每分每秒都保持下去,这使代理看起来健康并掩盖了错误。

注意‘services.docker compose raw'是‘TEXT NOT NULL',所以所存储的值是一个空字符串,而不是‘NULL'. serviceParser ()' 早回作弊作曲,因此受影响的服务保留一个完全有效的docker compose'一栏,而`docker compose raw'是空的-除非尝试重新启动代理程序,否则没有任何明显的迹象表明有任何错误。

• 预期行为

一个带有空 “ docker compose raw” 的服务不应贡献任何网络而跳过 。 代理服务器 . . . . . . .

内容来源: coollabsio/coolify