如何从docker-compose文件中覆盖/etc/resolv.conf中Docker的embedded式DNS服务器

我正在使用docker-compose命令来创build和启动我的容器。

我的Docker docker --version Docker version 17.09.0-ce, build afdb6d4

我的Docker-Compose docker-compose --version docker-compose version 1.16.1, build 6d1ac21

我使用的.yml文件看起来像这样:(请注意,我已经缩短了它以采取敏感的事情)

 --- services: zookeeper: image: "zookeeper" server-1: cap_add: - "NET_ADMIN" server-0: cap_add: - "NET_ADMIN" dns: - 8.8.8.8 - 9.9.9.9 environment: SERVER_ID: 0 NETEM_HOSTS: "" LOSS_VALUES: "" MAX_RATE_VALUES: "" DELAY_VALUES: "" image: "cloud.mycompany.com:5000/server-0:latest" fakedns: image: "cloud.mycompany.com:5000/fakedns:latest" version: "3.3" 

然后我开始使用: docker-compose --file compose.yml up -d

我的问题是这样的:

1)容器出现后…当我进入一个容器,例如在这种情况下,服务器0,我没有看到/etc/resolv.conf文件更新使用这些名称服务器。 相反,它使用127.0.0.11的docker的embedded式dns

2)我如何确保它使用我在docker-compose使用的文件中指定的内容

3)我试图用命令做到这一点,它似乎工作,但我需要从撰写文件docker run -p 4000:53 --dns=8.8.8.8 cloud.mycompany.com:5000/server-0:latest

4)理想情况下,我希望它具有容器'fakedns'的IP地址,以便它使用这个而不是embedded的@ 127.0.0.11

您不会在/etc/resolv.conf看到自定义的DNS服务器,但是Docker的parsing器会将DNS请求转发给它们。

用户定义的networking和DNS

Docker组成的定义是v2 +默认创build一个用户定义的networking。

具有用户定义networking的Docker使用embedded式DNS服务器,以便Docker可以响应本地容器请求(服务发现)。

对于Docker无法parsing的任何DNS主机,请求将被转发到DNS服务器上。 这是系统默认服务器,在dockerdconfiguration的服务器或运行时为容器configuration的DNS服务器。

Docker DNS

使用内部DNS服务器时要小心。 Docker守护进程中的事情将会中断,如果您在创build鸡或蛋问题时将系统DNS指向容器,Docker需要DNS才能启动,但无法启动容器来提供DNS。

由于你的示例configuration只是设置一个应用程序容器的DNS,所以应该没问题,但在你的应用程序之前确保DNS容器已经正常运行。