容器"共享"宿主机的hosts文件(终极方案)

Posted Runner_Jack

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了容器"共享"宿主机的hosts文件(终极方案)相关的知识,希望对你有一定的参考价值。

0.背景

有时候制作docker镜像生成容器时需要宿主机的hosts文件共享到容器中。首先想的是通过挂载的方式共享hosts文件,但是实践时发现根本行不通,hosts文件在/etc/目录下,如进行挂载将会将/etc/目录全部共享到容器中,如果容器与宿主机的系统不一致,这样挂载会给容器的微系统带来无法正常运行的风险。后来实践后,即使将/etc目录进行挂载也是无效的。所以通过挂载/etc/目录是行不通的。后经网上查阅其他方法也没有合适解决方案,以下是我个人的想法。

1、方法

既然挂载方式行不能,能不能在生成容器时动态把hosts文件的关系动态加载到容器的hosts文件里面去呢?经过收集资料后最后也找到解决方法,利用awk命令与docker的--add-host参数。思路就是动态读取hosts文件,并将数据拼接成--add-host所要的格式(以下是个例子):

*********************************

docker run -it \
--name mockdata \
-v /bigdata/MockData:/bigdata/MockData \
--restart always \
$(cat /etc/hosts|awk -F ‘ ‘ ‘if(NR>2){{print "--add-host " $2 ":" $1}}‘) \
mockdata \
bin/sh

*********************************

重点就是在黄色部分,将hosts文件动态读取,拼接成--add-host所要的格式,红色部分是过滤头hosts文件的头两行(不要我想要的)。

2、缺点

不能动态加载宿主机的hosts文件,如果宿主机的hosts文件发生变化,将容器删除后重新生成。容器只提供服务,不保存数据,所以删除重新生成是可以的。

以上是关于容器"共享"宿主机的hosts文件(终极方案)的主要内容,如果未能解决你的问题,请参考以下文章

安装时出错,错误消息:“mount.nfs:远程共享不是‘host:dir’格式”

求助,jetty服务器和tomcat服务器session共享问题

Docker-基础003-容器数据卷

虚拟机如何与主机共享文件夹

虚拟机如何与主机共享文件夹

docker 网络模式