Docker部署GitLab-Runner执行CI/CD时Dind连接错误求助
问题分析
你遇到的错误是因为GitLab-Runner容器内的Docker客户端默认尝试通过TCP连接tcp://docker:2375访问Docker守护进程,但你部署Runner时已经挂载了宿主机的/var/run/docker.sock,这是**Docker-out-of-Docker(DOOD)**的使用方式,需要让容器内的Docker客户端通过这个Unix套接字而非TCP连接来调用宿主机的Docker服务。
解决方案
1. 修改GitLab-Runner配置文件
宿主机上的Runner配置文件路径为/srv/gitlab-runner/config/config.toml,编辑该文件找到对应Runner的[[runners]]区块,确保[runners.docker]部分包含以下关键配置:
[[runners]] name = "你的Runner名称" url = "https://gitlab.com/" token = "你的Runner令牌" executor = "docker" [runners.docker] tls_verify = false image = "docker:latest" privileged = false volumes = ["/var/run/docker.sock:/var/run/docker.sock", "/cache"] [runners.cache] [runners.cache.s3] [runners.cache.gcs]
重点是volumes中必须保留/var/run/docker.sock:/var/run/docker.sock,确保容器内的Docker客户端能直接访问宿主机的Docker守护进程。
2. 修正CI/CD配置文件
打开项目根目录的.gitlab-ci.yml,检查并调整以下内容:
- 移除job中手动设置的
DOCKER_HOST=tcp://docker:2375环境变量(如果存在),若需要显式指定则改为unix:///var/run/docker.sock - 删除
services: [docker:dind]配置——挂载套接字方式不需要Docker-in-Docker服务
示例正确的build job配置:
build: stage: build image: docker:latest script: - docker build -t $TAG_LATEST .
3. 重启GitLab-Runner容器
修改配置后,重启Runner使设置生效:
docker restart gitlab-runner
4. 验证连接有效性
进入Runner容器手动测试Docker连接,确认配置生效:
docker exec -it gitlab-runner sh docker info
若能正常输出Docker系统信息,说明连接正常,此时重新触发CI/CD流水线即可。
内容的提问来源于stack exchange,提问作者Vadim Popov
相关产品推荐
相关产品推荐

