Docker容器加載宿主機的hosts解析
前言
公司一直在用傳統的tomcat下丟war包的架構體系,隨著項目的增多、服務器數量的增多、需要為此花費很多時間在不同服務器的系統環境問題上。為了技術的與時俱進和工作的運維效率等方面,筆者引入docker容器部署方式,通過Gitlab+Jenkins+Harbor體系,通過Dockerfile生成自定義鏡像並放置Harbor倉庫,Jenkins加上自定義Shell腳本(實現拉鏡像,啟動容器,容器映射端口固定,自定義日誌路徑)等,基本實現了持續集成的自動化部署。在測試環境試用了一段時間,發現效果還不錯,但近來卻發現容器中應用有報錯,根據報錯信息定位到容器中hosts文件解析問題。
解決
於是乎,通過各種試驗,找到了解決方案,即在docker容器啟動時通過---add-host方式加載宿主機的解析到容器中,如下:
/usr/bin/docker run -d \
-p 8888:7001 \
-p 9999:37001 \
-v /webapps/health_record\.war:/usr/local/tomcat-7001/webapps/health_record\.war \
-v /logs/health_record:/usr/local/tomcat-7001/logs \
-v /logs/HC_logs/health_record:/usr/local/dir_samba \
--name health_record8 \
172.21.97.152/tomcat/tomcat-de:4.0
說明
重點是標紅內容,將hosts文件動態讀取,拼接成--add-host所要的格式,NR>2是過濾掉/etc/hosts文件中頭兩行(不是我想要的內容)。
缺點
不能動態加載宿主機的hosts文件,如果宿主機的hosts文件發生變化,容器需要同步更新,必須刪除容器重新生成即可。
完善
此為開啟容器時加參數方式,也可用其他方式,如:
1)進入容器編輯hosts文件; # 臨時解決
2)修改容器默認的解析文件(即自定義hosts文件); # 將容器變成啟動後不去找/etc/hosts,而是找自定義的hosts文件
Docker容器加載宿主機的hosts解析