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

时间:2017-03-28 10:31:39

标签: docker

如何解决容器中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来构建容器的解析文件。

我甚至很确定我之前看到过这种情况......但我可能错了。

有什么想法吗?

乔瓦尼

2 个答案:

答案 0 :(得分:10)

查看--add-host命令的docker标记: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

此问题的常见方法是将--add-host与Docker的主机网关地址一起使用,例如--add-host="dockerhost:172.17.42.1"。检查上面的问题,找出一些找到正确IP并启动容器的脚本。

答案 1 :(得分:0)

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

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