DigitalOcean上GitLab特定Runner报错lookup docker: no such host如何解决
报错原因
- 配置逻辑冲突:你同时配置了两种Docker调用方式:
gitlab-ci.yml里声明了docker:dind服务、指定Docker访问地址为tcp://docker:2375;而config.toml里又挂载了宿主机的/var/run/docker.sock套接字,两套配置互相冲突。 - DIND服务无法启动:如果你要使用Docker-in-Docker(dind)方案,Docker executor必须开启
privileged=true权限,你当前配置中该参数为false,导致dind服务启动失败,CI作业自然无法解析docker这个服务主机名,从而抛出DNS解析失败的报错。 - 多余的环境变量配置:如果你打算直接使用宿主机的Docker服务(挂载套接字的方式),就不需要配置
DOCKER_HOST环境变量,Docker默认会读取本地的/var/run/docker.sock文件。
修复方案
两种方案二选一即可,不要混合配置:
方案1:使用宿主机Docker套接字(更推荐,性能更高、配置更简单)
- 修改
.gitlab-ci.yml,删除以下配置段:
services: - docker:dind # - docker:18-dind variables: DOCKER_HOST: tcp://docker:2375 DOCKER_DRIVER: overlay2 DOCKER_TLS_CERTDIR: ""
- 确认
config.toml中保留volumes = ["/cache","/var/run/docker.sock:/var/run/docker.sock"]配置,privileged参数保持false即可。 - 重启GitLab Runner服务生效:
gitlab-runner restart
方案2:使用Docker-in-Docker(dind)方案
- 修改
config.toml,将[runners.docker]下的privileged = false改为privileged = true,同时删除volumes中的/var/run/docker.sock:/var/run/docker.sock挂载项避免冲突。 - 保留
.gitlab-ci.yml中现有的dind服务配置、DOCKER开头的环境变量配置。 - 重启GitLab Runner服务生效:
gitlab-runner restart
可选优化项
你看到的WARNING! Using --password via the CLI is insecure只是安全警告,不影响执行,如果要消除该警告,可以将docker login命令修改为:
echo $CI_JOB_TOKEN | docker login -u $CI_REGISTRY_USER --password-stdin $CI_REGISTRY
内容的提问来源于stack exchange,提问作者Abdul Rehman
相关产品推荐
相关产品推荐

