如何解决容器中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来构建容器的解析文件。
我甚至很确定我之前看到过这种情况......但我可能错了。
有什么想法吗?
乔瓦尼
答案 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。