我正在使用单个 GitLab Runner 运行 GitLab CI/CD 管道。我的 gitlab-ci.yml 包含额外的主机,这些主机似乎应用正确,但我在 Docker 登录步骤中遇到了问题。
这是我的 gitlab-ci.yml 的相关部分:
stages:
- build
default:
tags:
- shared
variables:
DOCKER_IMAGE: "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG"
build:
stage: build
image: docker:latest
services:
- docker:dind
script:
- cat /etc/hosts
- ping -c 4 10.10.30.2
- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
- docker build -t $DOCKER_IMAGE .
- docker push $DOCKER_IMAGE
only:
- branches
运行器的 config.toml 包含此 extra_hosts 配置:
extra_hosts = ["gitlab.example.com:10.10.30.2", "registry.gitlab.example.com:10.10.30.2"]
管道输出确认主机条目设置正确:
10.10.30.2 gitlab.example.com
10.10.30.2 registry.gitlab.example.com
但是,当尝试运行 docker login 时,出现以下错误:
Error response from daemon: Get "https://registry.gitlab.example.com/v2/": dial tcp: lookup registry.gitlab.example.com on 193.110.81.0:53: no such host
Docker 似乎无法识别 extra_hosts 条目,而是尝试使用外部 DNS 服务器解析注册表 URL。
如何确保 Docker 使用 extra_hosts 中为我的注册表 URL 设置的正确主机配置?
解决方案
基于在线解决方案(感谢 Aroon),此修复通过添加以下行解决了 Docker 忽略 GitLab Runner Build-Container 内的 /etc/hosts 文件的问题 到 Docker 主机上的 /etc/hosts 文件。
10.10.30.2 registry.gitlab.example.com
这不是最理想的解决方案,但目前可以作为一种可行的解决方法。