docker 如何使用主机名与本地网络中的其他主机进行通信?

docker 如何使用主机名与本地网络中的其他主机进行通信?

我在同一网络中有两台计算机,主机名和 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 服务器必须能够使用它。

相关内容