如何在容器中解析Docker主机名(/etc/hosts)

7
如何在容器中解析Docker主机的/etc/hosts中定义的名称?
在我的Docker主机上运行的容器可以解析公共名称(例如www.ibm.com),因此Docker DNS正常工作。
我想要从容器中解析Docker主机的名称(例如127.17.0.1 smtp)。
我的最终目标是从容器中连接到在Docker主机上运行的服务(例如SMTP服务器)。我知道我可以从容器中使用Docker主机IP(127.17.0.1),但我认为Docker也应该使用Docker主机的/etc/hosts来构建容器的解析文件。
我甚至很确定我以前见过这个工作……但我可能错了。
有什么想法吗?
乔万尼

这里有一个类似的问题:如何让Docker容器使用主机机器的/etc/hosts文件,并且已经有了解决方案。 - itiic
2个回答

12

请查看docker命令中的--add-host标志:https://docs.docker.com/engine/reference/run/#managing-etchosts

$ docker run --add-host="smtp:127.17.0.1" container command

在Docker中,/etc/hosts文件不能在运行时被覆盖或修改(这是一种安全特性)。您需要使用Docker的API,在本例中为--add-host来修改该文件。

对于docker-compose,请使用extra_hosts选项。

有关“连接到主机上运行的服务”的整个问题,请参见此GitHub问题讨论:https://github.com/docker/docker/issues/1143

该问题的常见解决方案是使用Docker网关地址作为主机的--add-host,例如--add-host="dockerhost:172.17.42.1"。查看上面的问题以获取一些脚本,找到正确的IP并启动您的容器。


0
你可以在主机上设置一个简单的 DNS 服务器,并在容器中设置 /etc/resolve.conf 到 Docker 主机 DNS 服务器。
例如,在 dnsmasq 中,你可以在配置文件中添加 addn-hosts=/etc/hosts。这样,容器就可以通过使用 Docker 主机 DNS 服务器来解析主机的 /etc/hosts。

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