从 ECR 拉取 docker:dind 时,Docker 从 GitLab CI 登录 AWS ECR 失败,并显示“dial tcp: Lookup docker on xxxx:53: no such host”

Ale*_* B. 19 amazon-web-services gitlab docker amazon-ecr

我正在致力于将用于 GitLab CI/CD 构建和部署的 Docker 镜像集合从 Dockerhub 移植到 AWS 公共 ECR。除了我们用作 Docker-in-Docker 服务的标准 Docker 镜像之外,一切都按其应有的方式运行。从 Dockerhub 拉取时可以正常工作的相同镜像在从公共 ECR 拉取时无法登录。

.gitlab-ci.yml

    build-push:
      stage: package
      image: public.ecr.aws/x/x
      services:
      - public.ecr.aws/x/docker-dind:20.10
Run Code Online (Sandbox Code Playgroud)
$ aws ecr get-login-password --region $AWS_REGION | docker login --username AWS --password-stdin $AWS_DOCKER_REGISTRY_URL
> Logging in to Docker registry...
> error during connect: Post http://docker:2375/v1.24/auth: dial tcp: lookup docker on 8.8.8.8:53: no such host
Run Code Online (Sandbox Code Playgroud)
$ cat /etc/hosts
127.0.0.1   localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2  public.ecr.aws__*
172.17.0.2  public.ecr.aws-*
172.17.0.3  runner-*
Run Code Online (Sandbox Code Playgroud)

谢谢。

小智 26

要解决此问题,只需在 /etc/gitlab-runner/config.toml 上添加一个到 docker sock 的卷映射即可。

volumes = ["/var/run/docker.sock:/var/run/docker.sock", "/cache"]
Run Code Online (Sandbox Code Playgroud)

  • 如果您需要网络,。而不是将“privileged=true”添加到 /etc/gitlab-runner/config.toml (7认同)

小智 7

在 gitlab-ci 中构建 docker 镜像时,必须添加以下内容(dind用于“docker in docker”):

services:
  - docker:dind
Run Code Online (Sandbox Code Playgroud)


MLu*_*MLu 0

这可能是您的 Docker 环境配置错误。由于某种原因,它似乎是通过 Google 名称服务器解析名称docker(来自http://docker:2375/v1.24/authURL)8.8.8.8。这显然不能\xe2\x80\x99 工作。

\n

尝试在您的中添加120.0.0.1 docker记录/etc/hosts- 这可能会有所帮助。

\n