You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级Docker DinD后镜像构建失败 报ECONNREFUSED连接错误

故障根因

该问题是Docker DinD 20.x版本默认行为变更+自定义启动参数覆盖默认配置共同导致的:

  • 18.09.x版本的官方dind镜像默认会监听无加密的2375 TCP端口接收请求,不需要额外配置即可被旧版客户端直连。
  • 20.10.x版本的官方dind镜像默认安全策略升级:不再默认监听无加密的2375端口,仅监听本地Unix套接字/var/run/docker.sock和强制开启TLS验证的2376 TCP端口;同时当用户在Kubernetes YAML中自定义args字段时,传入的参数会完全覆盖镜像内置的默认dockerd启动参数,原有配置仅指定了存储驱动和MTU值,没有显式声明端口监听规则,最终导致dockerd启动后根本没有在2375端口监听,客户端发起连接时直接触发ECONNREFUSED错误。
排查步骤
  • 进入运行中的builder容器,执行ss -tulnp | grep dockerd查看端口监听状态,可确认无进程监听2375端口,仅存在2376端口或Unix套接字的监听记录。
  • 在容器内执行ps aux | grep dockerd查看实际启动参数,可确认启动命令中未携带2375端口监听、TLS关闭相关配置。
  • 检查构建客户端的环境变量配置,可确认客户端默认请求的目标端口仍为2375,与服务端实际监听端口不匹配。
解决方案

根据集群安全要求二选一即可:

方案1:兼容旧版无加密通信(适配内网可信集群,改造成本最低)

调整builder容器的YAML配置,显式关闭TLS并声明2375端口监听规则,和18.09版本行为完全对齐,客户端侧无需任何修改:

spec:
       containers:
       - name: builder
         image: docker:20.10.14-dind
         env:
         - name: DOCKER_TLS_CERTDIR
           value: ""
         args: ["--host=tcp://0.0.0.0:2375", "--host=unix:///var/run/docker.sock", "--storage-driver", "overlay2", "--mtu", "1460"]
         imagePullPolicy: Always
         resources:

注意:必须显式加上--host=unix:///var/run/docker.sock参数,否则容器内本地执行docker命令会无法连接本地套接字。
配置更新后滚动重启Pod即可恢复所有构建任务。

方案2:采用默认TLS加密通信(安全性更高)

如果需要遵循20.x版本的默认安全规则使用加密通信:

  • 保留dind默认的TLS配置,将dind自动生成的客户端证书目录挂载到所有执行构建任务的业务容器中。
  • 将所有构建客户端的DOCKER_HOST环境变量修改为tcp://<builder服务地址>:2376,同时配置DOCKER_TLS_VERIFY=1并指定正确的证书挂载路径,即可完成正常通信。

内容的提问来源于stack exchange,提问作者brandizzi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 09:54:26