码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-05-23 02:25:52      阅读:382      评论:0      收藏:0      [点我收藏+]

标签:动态   动态加载   服务   格式   host   awk命令   add   rest   黄色   

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文件(终极方案)

标签:动态   动态加载   服务   格式   host   awk命令   add   rest   黄色   

原文地址:https://www.cnblogs.com/runnerjack/p/9074579.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!