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

GitLab Runner Docker-in-Docker特权服务配置问题求助

GitLab Runner Rootless DinD 启动超时/无法连接问题排查解决

核心问题分析

从配置和报错来看,主要问题集中在两个方面:

  • Rootless DinD服务启动时的网络DNS解析失败(提示lookup docker no such host)
  • Rootless DinD守护进程未正常初始化(提示“docker守护进程是否运行”)

以下是针对性的配置修正与排查步骤:


一、修正GitLab Runner配置(/etc/gitlab-runner/config.toml)

原配置存在重复的服务权限规则,且缺少Rootless DinD必需的共享内存配置:

name = "docker"
url = "https://gitlab.self.hosted.com"
id = 6
token = "my_token"
token_obtained_at = 2023-07-04T10:11:42Z
token_expires_at = 0001-01-01T00:00:00Z
executor = "docker"
[runners.cache]
  MaxUploadedArchiveSize = 0
[runners.docker]
  tls_verify = false
  image = "docker:24.0.2"
  services_privileged = true
  # 清理重复规则,保留有效匹配
  allowed_privileged_services = ["docker.io/library/docker:*-dind-rootless", "docker.io/library/docker:dind-rootless"]
  disable_entrypoint_overwrite = false
  oom_kill_disable = false
  disable_cache = false
  volumes = ["/certs/client", "/cache", "/dev/shm:/dev/shm"]
  # Rootless DinD需要足够共享内存,避免启动失败
  shm_size = 268435456

修改后重启GitLab Runner:

gitlab-runner restart

二、修正.gitlab-ci.yml配置

Rootless DinD的网络、TLS配置与普通DinD存在差异,需调整环境变量:

方案1:启用TLS(对应原错误1场景)

stages:
  - test  
test-job:
  stage: test
  image: docker:stable
  services:
    - name: registry.hub.docker.com/library/docker:24.0.2-dind-rootless
      alias: docker
      # 添加Rootless DinD专属环境变量,解决DNS解析问题
      variables:
        ROOTLESSKIT_SLIRP4NETNS_SANITIZE_HOST: "0"
        DOCKER_TLS_CERTDIR: "/certs"
  variables:
    DOCKER_HOST: tcp://docker:2376/
    DOCKER_DRIVER: overlay2
    DOCKER_TLS_CERTDIR: "/certs"
    # 强制使用TLS验证
    DOCKER_TLS_VERIFY: "1"
  tags: [docker]
  script:
    - docker info

方案2:禁用TLS(对应原错误2场景)

stages:
  - test  
test-job:
  stage: test
  image: docker:stable
  services:
    - name: registry.hub.docker.com/library/docker:24.0.2-dind-rootless
      alias: docker
      variables:
        ROOTLESSKIT_SLIRP4NETNS_SANITIZE_HOST: "0"
        DOCKER_TLS_CERTDIR: ""
  variables:
    # Rootless DinD禁用TLS时使用2375端口
    DOCKER_HOST: tcp://docker:2375/
    DOCKER_DRIVER: overlay2
    DOCKER_TLS_CERTDIR: ""
  tags: [docker]
  script:
    - docker info

三、额外排查点

  1. 主机内核配置检查:确保Runner主机已启用用户命名空间支持

    sysctl kernel.unprivileged_userns_clone
    

    若输出为0,执行以下命令启用并持久化:

    sysctl -w kernel.unprivileged_userns_clone=1
    echo "kernel.unprivileged_userns_clone=1" >> /etc/sysctl.conf
    
  2. Rootless DinD镜像兼容性:确保使用的docker:24.0.2-dind-rootless镜像版本与Job使用的docker:stable版本匹配,避免API版本不兼容问题。

  3. Runner日志排查:查看Runner日志定位服务启动失败的具体原因

    gitlab-runner logs
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 17:13:17