Gitlab容器Registry连接被拒 CI流水线报错no such host如何解决
GitLab CI Registry登录报错排查方案
1 优先排查DNS解析故障
报错信息中包含no such host,说明当前CI运行环境无法解析registry.domain域名,为最高优先级排查项:
- 在CI流水线的
docker login命令前新增调试指令,打印域名解析结果:before_script: - nslookup registry.domain - ping -c 3 registry.domain - 若解析失败,可选两种方案修复:
- 在GitLab Runner所在节点的
/etc/hosts文件中添加registry.domain对应的IP映射 - 调整GitLab Runner使用的DNS服务器,确保可正常解析自定义域名
- 在GitLab Runner所在节点的
2 验证HTTP协议适配配置
Docker默认优先使用HTTPS协议访问镜像仓库,你配置的Registry为HTTP协议,需额外适配:
- 首先在CI中打印
$CI_REGISTRY变量确认取值:echo $CI_REGISTRY,如果返回值为不带http://前缀的纯域名,Docker会自动拼接https://前缀发起请求,导致报错 - 修复方式二选一:
- 直接修改登录命令,手动指定HTTP协议:
docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" http://$CI_REGISTRY - 为DinD服务配置不安全仓库参数,修改
.gitlab-ci.yml配置:image: docker:18-git services: - name: docker:18-dind command: ["--insecure-registry=registry.domain"]
- 直接修改登录命令,手动指定HTTP协议:
- 若使用自建Runner,还需在Runner所在节点的
/etc/docker/daemon.json中添加配置,之后重启Docker服务生效:{ "insecure-registries": ["registry.domain"] }
3 验证服务连通性
完成上述两步后如果仍报错,验证网络连通性:
- 在CI中添加指令
curl -v http://registry.domain/v2/,确认80端口无防火墙、安全组拦截,可正常访问Registry服务
内容的提问来源于stack exchange,提问作者Dawn tns
相关产品推荐
相关产品推荐

