Docker守护进程和DNS

Docker守护进程和DNS,dns,docker,Dns,Docker,我试图强制docker守护进程使用绑定到bridge0接口的DNS服务器。 我在docker_选项中添加了--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. 但此域的拉取失败: docker pull registry.service.consul:5000/test FATA[

我试图强制docker守护进程使用绑定到bridge0接口的DNS服务器。 我在docker_选项中添加了--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.
但此域的拉取失败:

docker pull registry.service.consul:5000/test
FATA[0000] Error: issecure: could not resolve "registry.service.consul": lookup registry.service.consul: no such host
PS:通过在my/etc/resolv.conf中添加nameserver 172.17.42.1,可以解决这个问题,但DNS必须专门用于docker命令

有什么想法吗?

您将
--dns 172.17.42.1
传递给docker\u opts,因此您应该能够从其他容器中解析容器主机名但是显然你是从主机而不是容器中进行
docker pull,不是吗?因此,您无法从主机解析容器的主机名并不奇怪,因为它没有配置为使用
172.17.42.1
解析

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

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

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

    docker exec-it客户端docker pull注册表。服务。领事:5000/测试


  • 通常,您试图覆盖任何命令的dns解析。我认为,如果不更新/etc/resolv.conf或/etc/hosts,就无法做到这一点。一件可能有效的事情是运行docker注册表缓存,并在运行注册表时将其dns指向您的dns服务器。然后,您必须将该缓存用于所有拉取请求。当您使用docker--help时,正如我所看到的,我应该能够做到:docker--dns=172.17.42.1 pull registry.service.concur/xxxI尝试过这个。我在tcpdump上放置了一个监视器,并在pull上执行了--dns,但是,没有到--dns地址的请求。我看了文档,似乎dns可以和run一起使用,就这样。好的,谢谢你检查greg。如果有人有主意的话,那就好了,所以您可以确认——dns选项仅用于容器目的,以便设置容器解析中提供的IP。conf@FlorentValdelievre,我有:)