繁体   English   中英

在具有桥接网络的Docker容器中映射主机的/ etc / hosts

[英]Map host's /etc/hosts in a Docker container having bridge networking

我有一台主机,在其/ etc / hosts文件中定义了一些主机分辨率。

在这台机器上,我正在运行配置有网桥网络的Docker容器。
由于我不在主机网络上,因此我的Docker容器无法访问我的机器/ etc / hosts文件的主机定义。

不幸的是,目前无法选择DNS。

我的问题是如何通过网桥网络在容器中使用这些定义? 我读到在容器中安装主机/ etc / hosts文件不是一个好选择,因为这是由docker deamon内部处理的。
你知道我还能怎么做到吗?

我认为最好使用--add-host的命令行选项将条目添加到容器的/etc/hosts中。

这是官方Docker Reference的摘录

管理/etc/hosts

您的容器将在/ etc / hosts中包含几行,这些行定义了容器本身的主机名以及localhost和其他一些常见的东西。 --add-host标志可用于向/ etc / hosts添加其他行。

 $ docker run -it --add-host db-static:86.75.30.9 ubuntu cat /etc/hosts 172.17.0.22 09d03f76bf2c fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback 86.75.30.9 db-static 

您有2个选择

docker run -v /etc/hosts:/etc/hosts <yourimage>

该选项的问题是,您的容器主机文件被覆盖,如果您想联系该docker-network中的任何其他服务,这将适得其反。

因此,我会做

docker run -v /etc/hosts:/tmp/hosts <yourimage>

并在图像中使用一个入口点,这将在这几行中做一些事情

cat /tmp/hosts >> /etc/hosts

a)您想过滤掉某些行,例如localhost,或使用grep选择特定的行b)您要确保不要在每个容器引导程序上都重复此操作,因此请写一个信号量或类似内容(一个文件,无论如何检查文件)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM