我想这样做,以便我旋转的docker容器使用与我运行的主机上相同的/etc/hosts
设置。有没有办法做到这一点?
我知道有一个--add-host
选项与docker运行,但这不是我想要的,因为主机的/etc/hosts
文件可能在不同的机器上是不同的,所以我用--add-host
硬编码确切的IP /主机并不是很好。
在docker run命令中使用--network=host
。这告诉Docker使容器使用主机的网络堆栈。您可以了解更多here。
添加标准主机文件 -
docker run -it ubuntu cat /etc/hosts
添加服务器'foo'的映射 -
docker run -it --add-host foo:10.0.0.3 ubuntu cat /etc/hosts
添加多个服务器的映射
docker run -it --add-host foo:10.0.0.3 --add-host bar:10.7.3.21 ubuntu cat /etc/hosts
参考 - http://jasani.org/2014/11/19/docker-now-supports-adding-host-mappings/
如果受信任的用户启动您的容器,您可以使用shell函数轻松“复制”您需要的/etc/hosts
条目:
add_host_opt() { awk "/\\<${1}\\>/ {print \"--add-host $1:\" \$1}" /etc/hosts; }
然后你可以这样做:
docker run $(add_host_opt host.name) ubuntu cat /etc/hosts
这样您就不必对IP地址进行硬编码。
将此添加到您的运行命令:
-v /etc/hosts:/etc/hosts
如果您正在运行用于运行docker容器的虚拟机,如果有您希望容器知道的主机(VM等),则根据您使用的VM软件,您必须确保在用于您希望容器能够解析的任何机器的主机(托管VM)。这是因为VM及其容器将在其resolv.conf中拥有主机(IP)的IP
IMO,在运行docker时传递--network=host
选项是一个更好的选择,正如d3ming
建议的其他选项所建议的其他选项: