问题 将Docker父主机ip插入容器的hosts文件中


我是Docker的新手,并试图了解将docker parent host ip插入容器主机文件的最佳方法是什么。

我在Dockerfile中使用以下命令

RUN /sbin/ip route|awk '/default/ { print $3,"\tdockerhost" }' >> /etc/hosts

但有时候主机ip得到改变所以它不再相关......

如果你问自己,这样做的原因是我需要访问另外2个码头工人容器(并且链接不提供此功能)。

谢谢,


12835
2017-11-11 11:47


起源

我需要docker host的ip在/ etc / hosts文件中。 - Idan Gozlan
问题不在于awk,而是在错误的时间运行命令。有点像编译时与运行时。 - Bryan
链接是实现它的方式,它旨在提供对其他docker容器的访问。更好地解释您的用例以及链接如何对您不起作用。 - Motin


答案:


--add-host 为此做出选择。所以,在你的 docker run 命令,做类似的事情:

docker run --add-host dockerhost:`/sbin/ip route|awk '/default/ { print  $3}'` [my container]

13
2017-11-11 12:22



当主机ip发生变化时,你确定arg在重启后也会有效吗?它看起来只对创作有效...... - Idan Gozlan
啊,你的意思是你让Docker在重启时重启你的容器?是的,那将是一个问题。您可以以不同方式重新启动 - 请参阅 docs.docker.com/articles/host_integration。如果您想要一个动态方案来解析地址,可能使用DNS? - Bryan
命令 /sbin/ip route|awk '/default/ { print $3}' 在docker主机中运行,而不是在docker容器中运行,这会产生错误的ip结果。 - Santiago
@santiago这是OP所要求的。 - Bryan
有没有人知道是否可以在Docker compose中使用它 extra_hosts: 组态? - dukedave


--add-host 您可以在创建/运行容器时使用该选项 /sbin/ip 命令在OSX等操作系统中不可用,我们可以使用更通用的解决方案:
docker run --add-host=dockerhost:`docker network inspect \ --format='{{range .IPAM.Config}}{{.Gateway}}{{end}}' bridge` [IMAGE]


2
2017-07-06 18:38