1. 程式人生 > >容器"共享"宿主機的hosts文件(終極方案)

容器"共享"宿主機的hosts文件(終極方案)

data style 後來 想法 方案 無法 dock -h pri

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文件(終極方案)