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

Docker中GitLab Runner无法连接dind的Docker守护进程求助

问题描述

我知道这可能被视为重复问题,但尝试了网上所有方法仍未解决。我正尝试在Windows系统通过Docker Desktop搭建本地gitlab-ce服务器,经验不足无法解决错误,可能对情况理解不够透彻。

能在gitlab实例中看到活跃的runner,但运行流水线时持续出现以下错误:

ERROR: Failed to remove network for build
ERROR: Preparation failed: Cannot connect to the Docker daemon at tcp://dind:2375. Is the docker daemon running? (docker.go:933:12s)

http://gitlab.playground.local已在Windows主机文件中配置,可正常访问该实例,但runner存在问题。

Docker Compose配置

services:
  dind:
    container_name: dind
    image: docker:25.0.3-dind
    restart: unless-stopped
    privileged: true
    environment:
      DOCKER_TLS_CERTDIR: ""
    command:
      - --storage-driver=overlay2
    networks:
      - playground
    volumes:
      - D:/Playground/data/gitlab-runner/dind:/var/lib/docker

  runner:
    container_name: runner
    image: gitlab/gitlab-runner:alpine-v16.9.0
    restart: unless-stopped
    environment:
      - DOCKER_HOST=tcp://dind:2375
    networks:
      - playground
    volumes:
      - D:/Playground/conf/gitlab-runner:/etc/gitlab-runner:z

  register-runner:
    container_name: registerrunner
    image: gitlab/gitlab-runner:alpine-v16.9.0
    restart: 'no'
    depends_on:
      - dind
    environment:
      - CI_SERVER_URL=http://gitlab.playground.local/
      - RUNNER_TOKEN=...
    command:
      - register
      - --non-interactive
      - --url=http://gitlab.playground.local/
      - --token=...
      - --name=Runner
      - --executor=docker
      - --docker-image=docker:25.0.3-dind
      - --docker-volumes=/var/run/docker.sock:/var/run/docker.sock
    networks:
      - playground
    volumes:
      - D:/Playground/conf/gitlab-runner:/etc/gitlab-runner:z
      - D:/Playground/data/gitlab-runner/dind:/var/lib/docker
networks:
  playground:
    name: playground
    driver: bridge

config.toml配置

concurrent = 1
check_interval = 0
log_level = "debug"
log_format = "text"
connection_max_age = "15m0s"
shutdown_timeout = 0

[session_server]
  session_timeout = 1800

[[runners]]
  name = "Runner"
  url = "http://gitlab.playground.local/"
  id = 34
  token = "..."
  token_obtained_at = 2024-02-22T03:30:08Z
  token_expires_at = 0001-01-01T00:00:00Z
  executor = "docker"
  [runners.cache]
    MaxUploadedArchiveSize = 0
  [runners.docker]
    host = "tcp://dind:2375"
    tls_verify = false
    image = "docker:25.0.3-dind"
    privileged = true
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/var/run/docker.sock:/var/run/docker.sock", "/cache"]
    cache_dir = "cache"
    shm_size = 0
    network_mtu = 0

补充信息

  • 经过大量试错得到当前配置,也曾尝试不使用Docker-in-Docker以降低复杂度,但仍出现异常。
  • 尝试通过usermod -aG docker gitlab-runner处理权限问题,但alpine系统无usermod命令,因此按建议在docker compose文件中添加了user: 2000:2000属性,但仍未成功。
  • 已在Docker中暴露无TLS的守护进程tcp://localhost:2375,但无任何变化。
解决方案

针对你遇到的Docker daemon连接问题,从配置来看主要有几个关键点需要调整:

1. 暴露Dind容器的2375端口

你的dind容器没有对外暴露2375端口,导致runner无法访问内部的Docker daemon。在dind服务配置中添加ports字段:

services:
  dind:
    # 保留原有配置
    ports:
      - "2375:2375"

2. 移除Runner配置中不必要的Docker sock挂载

使用Dind模式时,runner应通过TCP连接dind容器的daemon,而非挂载宿主的/var/run/docker.sock。修改config.toml中的volumes配置:

[[runners]]
  [runners.docker]
    # 保留其他配置
    volumes = ["/cache"]  # 删除/var/run/docker.sock的挂载项

3. 确保Dind容器的Docker daemon监听正确地址

修改dind容器的启动命令,明确让daemon监听所有网卡的2375端口:

services:
  dind:
    command:
      - --storage-driver=overlay2
      - --host=tcp://0.0.0.0:2375

4. 验证网络连通性

在runner容器内执行以下命令,测试是否能连接到dind容器的Docker daemon:

docker exec runner curl http://dind:2375/version

如果返回Docker版本信息,说明网络连通正常;否则检查playground网络是否正常创建,所有容器是否都加入了该网络。

5. 调整Runner的启动依赖

depends_on仅保证容器启动顺序,无法确保dind的daemon就绪。可以给runner添加健康检查,或者手动等待dind容器启动完成后再启动runner服务:

services:
  runner:
    # 保留原有配置
    depends_on:
      dind:
        condition: service_started
    healthcheck:
      test: ["CMD", "docker", "info"]
      interval: 10s
      timeout: 5s
      retries: 3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 15:07:34