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

GitLab Runner无法检测Docker 流水线连接失败求助

GitLab Runner Docker流水线连接失败及docker:dind启动异常解决方法

问题概述

在自有域名GitLab环境使用VPS部署的GitLab Runner时,基础流水线可正常运行,但执行Docker相关流水线时出现DNS解析错误:

error during connect: Post http://docker:2375/v1.40/auth: dial tcp: lookup docker on 192.168.0.222:53: server misbehaving

同时完整日志显示docker:dind服务启动异常,存在权限不足、模块目录缺失等问题。

此前尝试的两种流水线配置及Runner配置如下:

原流水线配置

stages:
  - push
  - deliver

port9070-image-push:
  stage: push
  tags:
    - poc
    - maifee
  image: docker:stable
  services:
    - name: docker:dind
      alias: docker
  variables:
    DOCKER_HOST: tcp://docker:2375
    DOCKER_DRIVER: overlay2
    DOCKER_TLS_CERTDIR: ""
  script:
    - docker login -u $HARBOR_USERNAME -p $HARBOR_PASSWORD harbor.my-domain.bd
    - docker build -t harbor.my-domain.bd/library/port9070:latest -f Dockerfile .
    - docker push harbor.my-domain.bd/library/port9070:latest
  only:
    - dev
    - main

简化版流水线配置

stages:
  - push
  - deliver

port9070-image-push:
  stage: push
  tags:
    - poc
    - maifee
  variables:
    DOCKER_TLS_CERTDIR: ""
  script:
    - docker login -u $HARBOR_USERNAME -p $HARBOR_PASSWORD harbor.my-domain.bd
    - docker build -t harbor.my-domain.bd/library/port9070:latest -f Dockerfile .
    - docker push harbor.my-domain.bd/library/port9070:latest
  only:
    - dev
    - main

已修改的GitLab Runner配置

concurrent = 1
check_interval = 0
shutdown_timeout = 0

[session_server]
  session_timeout = 1800

[[runners]]
  name = "PoC runner - maifee"
  url = "my.git.url"
  id = 0
  token = "xyz"
  token_obtained_at = 0001-01-01T00:00:00Z
  token_expires_at = 0001-01-01T00:00:00Z
  executor = "docker"
  [runners.docker]
    tls_verify = false
    image = "docker:stable"
    privileged = true
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/cache"]
    shm_size = 0

解决方法

1. 复用宿主机Docker环境(推荐方案)

放弃docker:dind服务模式,直接挂载宿主机Docker socket,避免DNS解析和权限问题:

步骤1:修改GitLab Runner配置

编辑Runner配置文件,添加宿主机Docker socket挂载:

[[runners]]
  # 保留原有配置不变
  [runners.docker]
    # 保留原有配置不变
    volumes = ["/var/run/docker.sock:/var/run/docker.sock", "/cache"]

步骤2:重启GitLab Runner

sudo gitlab-runner restart

步骤3:调整流水线配置

更新流水线配置,指定使用Unix socket连接Docker:

stages:
  - push
  - deliver

port9070-image-push:
  stage: push
  tags:
    - poc
    - maifee
  variables:
    DOCKER_HOST: unix:///var/run/docker.sock
    DOCKER_TLS_CERTDIR: ""
  script:
    - docker login -u $HARBOR_USERNAME -p $HARBOR_PASSWORD harbor.my-domain.bd
    - docker build -t harbor.my-domain.bd/library/port9070:latest -f Dockerfile .
    - docker push harbor.my-domain.bd/library/port9070:latest
  only:
    - dev
    - main

2. 修复docker:dind模式的DNS与权限问题(备选方案)

若必须使用docker:dind服务,按以下步骤调整:

步骤1:指定可靠DNS服务器

在流水线中为docker:dind服务添加DNS配置,避免解析失败:

stages:
  - push
  - deliver

port9070-image-push:
  stage: push
  tags:
    - poc
    - maifee
  image: docker:stable
  services:
    - name: docker:dind
      alias: docker
      command: ["--dns", "8.8.8.8"]
  variables:
    DOCKER_HOST: tcp://docker:2375
    DOCKER_DRIVER: overlay2
    DOCKER_TLS_CERTDIR: ""
  script:
    - docker login -u $HARBOR_USERNAME -p $HARBOR_PASSWORD harbor.my-domain.bd
    - docker build -t harbor.my-domain.bd/library/port9070:latest -f Dockerfile .
    - docker push harbor.my-domain.bd/library/port9070:latest
  only:
    - dev
    - main

步骤2:确保镜像版本匹配

保证docker:stable镜像与docker:dind镜像版本一致(比如使用docker:dind:stable),避免版本不兼容导致的模块缺失问题。

步骤3:验证Runner权限

确认Runner配置中privileged = true已正确设置,且宿主机Docker服务正常运行:

sudo systemctl status docker

内容的提问来源于stack exchange,提问作者Maifee Ul Asad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 00:59:50