GitLab CI Docker执行器Runner的Docker DinD服务健康检查失败
解决GitLab CI Runner中Docker DinD服务健康检查失败问题
核心解决方案
1. 修复Runner配置的冲突
你的Runner配置中同时挂载了宿主的/var/run/docker.sock,这会导致Job直接使用宿主Docker环境,干扰DinD服务的网络解析。需要移除该挂载:
session_timeout = 1800 [[runners]] name = "dev-chat-ci-runner" url = "url" id = 17 token = "token" token_obtained_at = 2025-04-01T04:51:02Z token_expires_at = 0001-01-01T00:00:00Z executor = "docker" [runners.cache] MaxUploadedArchiveSize = 0 [runners.cache.s3] [runners.cache.gcs] [runners.cache.azure] [runners.docker] tls_verify = false image = "docker:28.0.4" privileged = true disable_entrypoint_overwrite = false oom_kill_disable = false disable_cache = false volumes = ["/certs/client", "/cache"] # 移除/var/run/docker.sock挂载 shm_size = 0 network_mtu = 0 pull_policy = 'if-not-present'
2. 完善DinD服务的环境变量与启动配置
更新chat-kit.gitlab-ci.yml,添加必要配置确保DinD服务正常启动,并替换不可靠的健康检查逻辑:
stages: - test image: docker:28.0.4 services: - name: docker:28.0.4-dind command: ["--storage-driver=overlay2"] # 指定存储驱动,避免权限异常 variables: DOCKER_TLS_CERTDIR: "" DOCKER_HOST: tcp://docker:2375 DOCKER_DRIVER: overlay2 # 与DinD服务的存储驱动保持一致 DIND_DISABLE_CLEANUP: "true" # 禁用自动清理,避免启动失败 cache: paths: - .cache/pip before_script: # 等待DinD服务完全就绪,替代默认的wait-for-it健康检查 - until docker info; do sleep 3; done - wget https://github.com/milvus-io/milvus/releases/download/v2.0.2/milvus-standalone-docker-compose.yml -O docker-compose.yml - docker compose up -d - cd chat-kit - python --version ; pip --version # 调试用 pytest: stage: test script: - echo "test"
3. 解决DinD启动权限限制
从DinD的错误日志看,存在挂载权限问题,可通过以下方式处理:
- 在Runner配置中添加安全选项,解除AppArmor限制:
[runners.docker] # 其他配置... security_opt = ["apparmor:unconfined"]
- 测试环境可临时关闭宿主的AppArmor服务:
sudo systemctl stop apparmor(生产环境谨慎操作)
问题根源分析
- Docker环境冲突:同时挂载宿主
docker.sock和使用DinD服务,导致Job优先使用宿主Docker,干扰了DinD服务的DNS解析,出现lookup docker on 127.0.0.11:53: server misbehaving错误。 - DinD启动不完整:缺少存储驱动配置,加上宿主安全模块(如AppArmor)的限制,导致DinD服务无法完成初始化,健康检查时无法解析
docker主机名。 - 健康检查时机错误:默认的
wait-for-it脚本在DinD服务未完全启动时就发起检查,导致nc: bad address 'docker'报错,改用循环等待docker info成功的逻辑更可靠。
内容的提问来源于stack exchange,提问作者probaku1234
相关产品推荐
相关产品推荐

