![从 ECR 拉取 docker:dind 时,Docker 从 GitLab CI 登录到 AWS ECR 失败,并显示“dial tcp: lookup docker on xxxx:53: no such host”](https://linux22.com/image/763113/%E4%BB%8E%20ECR%20%E6%8B%89%E5%8F%96%20docker%3Adind%20%E6%97%B6%EF%BC%8CDocker%20%E4%BB%8E%20GitLab%20CI%20%E7%99%BB%E5%BD%95%E5%88%B0%20AWS%20ECR%20%E5%A4%B1%E8%B4%A5%EF%BC%8C%E5%B9%B6%E6%98%BE%E7%A4%BA%E2%80%9Cdial%20tcp%3A%20lookup%20docker%20on%20xxxx%3A53%3A%20no%20such%20host%E2%80%9D.png)
我正在将用于 GitLab CI/CD 构建和部署的 Docker 镜像集合从 Dockerhub 移植到 AWS 公共 ECR。一切正常,除了标准 Docker 映像我们将其用作 Docker-in-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
$ 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
$ 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-*
谢谢。
答案1
要解决这个问题,只需在 /etc/gitlab-runner/config.toml 上添加一个到 docker sock 的卷映射。
volumes = ["/var/run/docker.sock:/var/run/docker.sock", "/cache"]
答案2
在 gitlab-ci 中构建 docker 镜像时,必须添加此项(dind
用于“docker in docker”):
services:
- docker:dind
答案3
根据 gitlab文档使用自定义 dind docker 镜像时,仍需要 docker 主机名。要解决此问题,您需要在 gitlab CI 配置中添加别名,如下所示:
build-push:
stage: package
image: public.ecr.aws/x/x
services:
- name: public.ecr.aws/x/docker-dind:20.10
- alias: docker
也不确定你的设置,但惯例是-dind
在图像末尾添加。因此,应该是public.ecr.aws/x/docker:20.10-dind
答案4
这可能是您的 Docker 环境配置错误。出于某种原因,它似乎通过 Google 名称服务器解析名称docker
(来自http://docker:2375/v1.24/auth
URL)8.8.8.8
。这显然行不通。
尝试在您的-中添加120.0.0.1 docker
记录/etc/hosts
可能帮助。