GitLab CI执行docker build命令报错:无法连接Docker服务
解决GitLab CI中Docker构建的DNS解析错误
错误本质
你碰到的ERROR: error during connect: Get "http://docker:2375/_ping": dial tcp: lookup docker on 127.0.0.53:53: server misbehaving错误,核心是Docker客户端无法通过DNS找到docker主机——这说明你的GitLab Runner环境没正确配置Docker-in-Docker(DinD)服务,导致构建任务里的Docker命令找不到可用的Docker守护进程。
解决方案
1. 修改.gitlab-ci.yml配置
在CI配置中添加DinD服务,并配置必要的环境变量:
stages: - build build-image: stage: build image: docker:latest services: - docker:dind # 引入DinD服务 variables: DOCKER_HOST: tcp://docker:2375 # 指定Docker守护进程的连接地址 DOCKER_TLS_CERTDIR: "" # 禁用TLS(无需加密连接时使用) script: - docker build --pull -t e45 .
2. 检查GitLab Runner执行器配置
如果用的是Docker执行器的Runner,必须确保其配置开启特权模式(DinD运行需要特权权限)。修改Runner的config.toml文件:
[[runners]] name = "Docker Runner" url = "https://你的GitLab实例地址/" token = "你的Runner令牌" executor = "docker" [runners.docker] tls_verify = false image = "docker:latest" privileged = true # 必须开启此选项 disable_entrypoint_overwrite = false oom_kill_disable = false disable_cache = false volumes = ["/cache"] shm_size = 0
3. 额外注意点
- 确保
docker镜像和docker:dind服务使用相同版本(比如都用docker:24.0.6和docker:24.0.6-dind),避免版本不兼容问题。 - 如果需要TLS加密连接,不要设置
DOCKER_TLS_CERTDIR: "",保留默认TLS配置即可。
内容的提问来源于stack exchange,提问作者Amir Ali
相关产品推荐
相关产品推荐

