Docker 守护进程和 DNS

Flo*_*vre 3 dns docker

我试图强制 docker 守护进程使用绑定到bridge0接口的DNS服务器。我在 docker_opts 中添加了 --dns 172.17.42.1 但没有成功

DNS 服务器使用 dig 命令回复 ok:

dig @172.17.42.1 registry.service.consul SRV +short
1 1 5000 registry2.node.staging.consul.
Run Code Online (Sandbox Code Playgroud)

但是使用该域拉取失败:

docker pull registry.service.consul:5000/test
FATA[0000] Error: issecure: could not resolve "registry.service.consul": lookup registry.service.consul: no such host
Run Code Online (Sandbox Code Playgroud)

PS:通过在我的 /etc/resolv.conf 中添加名称服务器 172.17.42.1 可以解决问题,但 DNS 必须专用于 docker 命令。

任何想法 ?

Vit*_*aev 5

您传递--dns 172.17.42.1给 docker_opts,因此您应该能够从其他容器内部解析容器主机名。显然你是docker pull从主机上做的,而不是从容器上做的,不是吗?因此,您无法从主机解析容器的主机名也就不足为奇了,因为它未配置为用于172.17.42.1解析。

我在这里看到两种可能的解决方案:

  1. 强制您的主机用作172.17.42.1DNS(/etc/resolv.conf等)。
  2. 创建一个特殊的容器,其中包含 Docker 客户端并挂载docker.sock到其中。这将使您能够使用所有客户端命令,包括pull

    docker run -d -v /var/run/docker.sock:/var/run/docker.sock:rw --name=client ...

    docker exec -it client docker pull registry.service.consul:5000/test