GitLab CI任务中Docker守护进程连接失败问题求助
GitLab CI Docker守护进程连接失败的解决方案
1. 修正.gitlab-ci.yml的服务与镜像配置
确保docker:dind服务开启特权模式,同时job使用官方docker镜像:
image: docker:latest services: - name: docker:dind privileged: true # 必须开启,dind需要特权权限 command: ["--tls=false"] # 关闭TLS简化配置,若需TLS可移除该行 variables: DOCKER_HOST: tcp://docker:2375 # 对应非TLS端口 DOCKER_TLS_CERTDIR: "" # 关闭TLS时需清空该变量 DOCKER_DRIVER: overlay2 # 推荐使用overlay2存储驱动
2. 检查GitLab Runner配置(自托管Runner)
如果使用自己搭建的Runner,需修改config.toml确保开启特权模式:
[[runners]] executor = "docker" [runners.docker] privileged = true # 关键配置,否则dind无法正常启动 image = "docker:latest" volumes = ["/cache"]
修改后重启Runner服务生效。
3. 等待Docker守护进程完全启动
CI中dind服务启动需要时间,可在job开头添加等待逻辑:
until docker info >/dev/null 2>&1; do echo "等待Docker守护进程初始化..." sleep 3 done
4. 验证网络连通性
在job中添加端口测试,确认能访问dind服务:
# 安装nc工具(部分docker镜像默认无) apk add --no-cache netcat-openbsd # 测试2375端口连通性 nc -zv docker 2375
若测试失败,需检查Runner的网络模式是否允许job容器与dind服务容器通信。
5. 排查dind服务日志
在job中打印dind服务日志,定位启动失败原因:
docker logs docker # docker是dind服务的默认容器名
内容的提问来源于stack exchange,提问作者Amir Shabani
相关产品推荐
相关产品推荐

