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
三、额外排查点
主机内核配置检查:确保Runner主机已启用用户命名空间支持
sysctl kernel.unprivileged_userns_clone若输出为
0,执行以下命令启用并持久化:sysctl -w kernel.unprivileged_userns_clone=1 echo "kernel.unprivileged_userns_clone=1" >> /etc/sysctl.confRootless DinD镜像兼容性:确保使用的
docker:24.0.2-dind-rootless镜像版本与Job使用的docker:stable版本匹配,避免API版本不兼容问题。Runner日志排查:查看Runner日志定位服务启动失败的具体原因
gitlab-runner logs
内容的提问来源于stack exchange,提问作者De_Jr
相关产品推荐
相关产品推荐

