如何解决容器中的docker主机名(/ etc / hosts)

如何解决在容器中的Docker主机的/ etc / hosts中定义的名字? 运行在我的Docker主机中的容器可以parsing公有名称(例如www.ibm.com),所以Docker的dns工作正常。 我想从容器中parsingDocker主机的名字(例如127.17.0.1 smtp)。

我的最终目标是从容器连接到在Docker主机(例如smtp服务器)中运行的服务。 我知道我可以使用容器中的Docker Host IP(127.17.0.1),但是我认为Docker会使用Docker主机/ etc / hosts来构build容器的parsing文件。

我甚至可以肯定,我已经看到了这个工作,但是我可能是错的。

有什么想法吗?

乔瓦尼

查看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在运行时不能被覆盖或修改(安全function)。 您需要使用Docker的API,在这种情况下,使用--add-host来修改文件。

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

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

这个问题的常见方法是使用--add-host--add-host的Docker的网关地址,例如--add-host="dockerhost:172.17.42.1" 。 检查上面的问题的一些脚本,find正确的IP,并启动您的容器。

你可以在主机上设置简单的DNS服务器,并在容器中设置/etc/resolve.conf到Docker主机的DNS服务器。

例如在dnsmasq中,您可以将addn-hosts=/etc/hosts到configuration文件。 因此,通过使用Docker主机DNS服务器,容器将能够parsing主机/ etc / hosts。