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

GitLab Runner搭配docker:20及以上版本dind时无法连接Docker守护进程的问题排查求助

解决GitLab Runner搭配docker:20+ DIND无法连接Docker守护进程的问题

我之前也碰到过一模一样的坑,升级docker:dind到20.x版本后就开始报这个连接错误,折腾了好几天才捋清楚解决办法,分享几个亲测有效的方案:

1. 强制DIND容器以非TLS模式启动

docker:20.x版本的dind镜像,就算设置了DOCKER_TLS_CERTDIR='',有时候还是会残留TLS相关的启动逻辑。你可以直接在.gitlab-ci.yaml的services配置里给dind加启动命令,强制它禁用TLS:

services:
  - name: docker:20.10.4-dind
    command: ["--tls=false"]

这样能确保dind守护进程完全以非加密模式运行,避免和客户端的TLS配置冲突。

2. 匹配Docker客户端与DIND镜像的版本

从你的日志能看到,job用的google/cloud-sdk:latest里的Docker客户端是19.03.11,但dind是20.10.4,版本不匹配很容易引发兼容性问题。你可以二选一:

  • 替换job的镜像为包含20.x版本Docker客户端的镜像,比如直接用docker:20.10.4(如果不需要gcloud工具的话),或者自己构建一个集成gcloud和20.x docker的自定义镜像
  • 临时把dind版本降到和客户端匹配的19.03.x版本(不过这只是权宜之计,还是建议升级客户端版本)

3. 添加等待DIND启动的重试逻辑

docker:20.x的dind启动速度比19.x慢不少,job里before_script直接跑docker version的时候,dind可能还没完全初始化完成。你可以加个循环等待:

before_script:
  - |
    until docker version; do
      echo "Waiting for Docker daemon to start..."
      sleep 3
    done

这样会一直重试直到连接成功,避免因启动延迟导致的失败。

4. 确认Kubernetes Runner的权限配置

虽然你已经设置了KUBERNETES_PRIVILEGED: "true",但还是要确认Runner的Pod是否真的以privileged模式运行dind容器。如果是Helm部署的Runner,可以修改values.yaml里的配置:

runners:
  config: |
    [[runners]]
      [runners.kubernetes]
        privileged = true
        [[runners.kubernetes.volumes.empty_dir]]
          name = "docker-sock"
          mount_path = "/var/run/docker.sock"
          medium = "Memory"

另外还要检查Kubernetes集群的Pod安全策略(PSP)或者PodSecurity标准,确保节点允许privileged容器运行,有些集群会默认限制这类容器。

5. 尝试改用Unix Socket连接

如果前面的方法都没用,可以试试把DOCKER_HOST改成Unix Socket路径,同时在service里挂载对应的共享卷:

services:
  - name: docker:20.10.4-dind
    command: ["--host=unix:///var/run/docker.sock"]
variables:
  DOCKER_HOST: unix:///var/run/docker.sock

记得要在Runner配置里挂载对应的emptyDir卷,让job容器和dind容器共享socket路径。

我当时是结合第1和第2点解决的:给dind加--tls=false启动命令,同时升级了job里的Docker客户端版本,问题立刻就消失了。你可以逐个尝试这些方案,应该能解决你的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 15:43:15