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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 06:00:16