如何使docker容器使用主机的/ etc / hosts文件?

问题描述 投票:37回答:7

我想这样做,以便我旋转的docker容器使用与我运行的主机上相同的/etc/hosts设置。有没有办法做到这一点?

我知道有一个--add-host选项与docker运行,但这不是我想要的,因为主机的/etc/hosts文件可能在不同的机器上是不同的,所以我用--add-host硬编码确切的IP /主机并不是很好。

docker
7个回答
58
投票

在docker run命令中使用--network=host。这告诉Docker使容器使用主机的网络堆栈。您可以了解更多here


12
投票

添加标准主机文件 -

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/


4
投票

如果受信任的用户启动您的容器,您可以使用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地址进行硬编码。


4
投票

将此添加到您的运行命令:

-v /etc/hosts:/etc/hosts

3
投票

如果您使用的是docker-compose.yml,则相应的属性为:

services:
  xxx:
    network_mode: "host"

Source


0
投票

如果您正在运行用于运行docker容器的虚拟机,如果有您希望容器知道的主机(VM等),则根据您使用的VM软件,您必须确保在用于您希望容器能够解析的任何机器的主机(托管VM)。这是因为VM及其容器将在其resolv.conf中拥有主机(IP)的IP


0
投票

IMO,在运行docker时传递--network=host选项是一个更好的选择,正如d3ming建议的其他选项所建议的其他选项:

  1. 主机的/ etc / hosts中的任何更改都可以立即用于容器,如果您在第一时间有这样的要求,这可能是您想要的。
  2. 使用-v选项挂载主机的/ etc / hosts可能不是一个好主意,因为容器的任何意外更改都会破坏主机配置。
© www.soinside.com 2019 - 2024. All rights reserved.