Docker: 容器是否会继承docker主机的/etc/hosts文件?

4

假设我有一台运行Docker的机器(Docker主机),并在其中启动了一些容器,

我需要容器的服务能够相互通信 - 容器暴露端口,它们也需要通过主机名解析(例如:example.com)

container A needs to talk to container B with URL: example.com:3000

我已经阅读了这篇文章,但对于从Docker主机继承的“inherit”不太确定,Docker主机的/etc/hosts文件是否会附加到在Docker主机内运行的容器的/etc/hosts文件中?

https://docs.docker.com/engine/reference/run/#managing-etchosts

如何实现?

这个“inherit”与Docker容器网络类型https://docs.docker.com/v17.09/engine/userguide/networking/的类型有任何联系吗?

1个回答

3

容器不继承宿主机的/etc/hosts文件。在使用--add-host参数或docker-compose中的extra_hosts时,Docker会更新容器内的文件。您可以使用docker-compose中的extra_hosts添加单个记录(https://docs.docker.com/compose/compose-file/#extra_hosts)。

但是,如果您只是尝试让两个容器相互通信,也可以将它们连接到同一个网络。在docker-compose中,您可以创建所谓的外部网络,并让所有docker-compose文件引用它。然后,您将能够通过完整的Docker容器名称连接(例如:http://project_app_1:3000)。

请参见https://docs.docker.com/compose/compose-file/#external


谢谢,您能在这个特定的情况下提供更多细节吗:容器A、B、C,只有A应该在“桥接”网络中连接到互联网。 A、B、C可以在私有网络中相互通信,显然A有2个网络接口。 B和C只有一个网络接口,如何使用“外部私有容器网络”在docker compose中实现此模型?如果您愿意,我可以写另一个问题。 - Tuyen Pham
1
您可以将容器连接到多个网络。一个网络可以作为连接互联网的桥梁,而另一个可以是私有的。虽然我不确定如何设置阻止互联网的网络 - 也许如果您更改容器的DNS设置(您也可以在docker-compose中修改),就可以实现。 - Michael Barany
我可以看到我们必须为每个容器设置静态IP地址才能使用“extra_hosts”,这对我的设置来说代价很大。 - Tuyen Pham
我将这个问题扩展到:https://stackoverflow.com/q/52921951/5813693 - Tuyen Pham

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接