将Docker主机的IP地址插入容器的hosts文件中

13
我对Docker还很陌生,正在尝试理解将docker主机ip插入容器主机文件的最佳方法。
我在我的Dockerfile中使用以下命令: “RUN /sbin/ip route|awk '/default/ { print $3,"\tdockerhost" }' >> /etc/hosts” 但有时主机ip会更改,因此变得不相关...
如果你问我为什么要那样做,那是因为我需要访问另外2个Docker容器(而链接不提供此功能)。
谢谢。

我需要将 Docker 主机的 IP 添加到 /etc/hosts 文件中。 - Idan Gozlan
2
问题不在于awk,而是在于在错误的时间运行命令。有点像编译时与运行时。 - Bryan
链接是实现这一目的的方法,它旨在为其他Docker容器提供访问权限。请更好地解释您的用例以及链接对您没有起作用的原因。 - Motin
2个回答

13

--add-host选项就是为此而设计的。因此,在您的docker run命令中,可以执行以下操作:

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

1
你确定在主机IP更改后重启后,arg仍然有效吗?看起来它只在创建时有效... - Idan Gozlan
啊,你的意思是如果你让Docker在重启时重新启动容器?是的,那会有问题。你可以以不同的方式重新启动 - 参见https://docs.docker.com/articles/host_integration/。如果你想要一个动态方案来解析地址,也许可以使用DNS? - Bryan
1
命令/sbin/ip route|awk '/default/ { print $3}'在Docker主机上运行,而不是在Docker容器中运行,这会产生错误的IP结果。 - Sergio Santiago
@santiago 这就是原帖作者所要求的。 - Bryan
3
有人知道是否可以在Docker Compose的“extra_hosts:”配置中使用这个吗? - davetapley

5

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


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