我在同一网络中有两台计算机,主机名和 IP 地址(动态 IP)如下:
host1.local - 10.0.0.11
host2.local - 10.0.0.12
host1
正在使用默认配置运行 Docker。
中的容器host1
可以host2
使用 IP 地址进行连接10.0.0.12
,但无法host2
使用主机名进行连接host2.local
。谁能告诉我容器如何直接连接到hosts2
使用的主机名。请注意,两台服务器host1, host2
都在 DHCP 服务器中,并且没有固定的 IP 地址,因此配置文件/etc/主机在我的情况下不起作用。
答案1
Docker 容器通常位于默认桥接网络:
当启动 Docker 时,会自动创建一个默认的桥接网络(也称为网桥),除非另有说明,新启动的容器都会连接到该网络。
您还可以拥有用户定义的网桥及其自己的 DNS 服务:
用户定义的桥提供容器之间的自动 DNS 解析。
在用户定义的桥接网络上,容器可以通过名称或别名相互解析。
还有其他选项可以在容器中配置 DNS 解析(请参阅这里):
默认情况下,容器继承
/etc/resolv.conf
配置文件中定义的主机的 DNS 设置。使用默认桥接网络的容器会获取此文件的副本,而使用自定义网络的容器则使用 Docker 的嵌入式 DNS 服务器,该服务器将外部 DNS 查找转发到主机上配置的 DNS 服务器。/etc/hosts 中定义的自定义主机不会被继承。要将其他主机传递到容器中,请参阅 docker run 参考文档中的“向容器主机文件添加条目”。您可以针对每个容器覆盖这些设置。
和将条目添加到容器主机文件说:
/etc/hosts
您可以使用一个或多个标志将其他主机添加到容器的文件中--add-host
。此示例为名为 docker 的主机添加静态地址:$ docker run --add-host=docker:93.184.216.34 --rm -it alpine
当然你也可以配置上游DNS服务器来正确解析*.local
。如果您为此使用 mDNS,则上游 DNS 服务器必须能够使用它。