容器"共享"宿主機的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文件發生變化,將容器刪除后重新生成。容器只提供服務,不保存數據,所以刪除重新生成是可以的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM