由于某种原因,我在Docker Swarm中使用Docker Compose文件创建的Docker容器没有正确的网络设置。
阅读有关网络here的Docker文档,我看到了:
By default, a container inherits the DNS settings of the Docker daemon, including the /etc/hosts and /etc/resolv.conf.You can override these settings on a per-container basis.
但是当我使用Docker Compose文件创建一个新堆栈时,容器内的/etc/resolv.conf文件与主机的/etc/resolv.conf文件没什么相似之处。因此,我无法连接到同一网络上的数据库服务器。
现在主机上的/etc/resolv.conf看起来像这样:
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 10.0.0.254
search localdomain
在Docker容器中,它看起来像这样:
search localdomain
nameserver 127.0.0.11
options ndots:0
要创建服务,我使用以下命令:
docker stack deploy --compose-file config.compose --with-registry-auth
Docker Compose文件相当大,但基本上只是一个应该启动的大量服务列表。 Docker Compose文件中没有定义网络选项。
作为测试,我还启动了一个服务而不是堆栈,这个服务确实正确地继承了/etc/resolv.conf文件。
任何人都知道为什么dns设置没有从主机正确继承?
系统规格:
操作系统:Ubuntu 16.04
Docker:18.03.1-ce,build 9ee9f40