前言web
公司一直在用傳統的tomcat下丟war包的架構體系,隨着項目的增多、服務器數量的增多、須要爲此花費不少時間在不一樣服務器的系統環境問題上。爲了技術的與時俱進和工做的運維效率等方面,筆者引入docker容器部署方式,經過Gitlab+Jenkins+Harbor體系,經過Dockerfile生成自定義鏡像並放置Harbor倉庫,Jenkins加上自定義Shell腳本(實現拉鏡像,啓動容器,容器映射端口固定,自定義日誌路徑)等,基本實現了持續集成的自動化部署。在測試環境試用了一段時間,發現效果還不錯,但近來卻發現容器中應用有報錯,根據報錯信息定位到容器中hosts文件解析問題。docker
解決tomcat
因而乎,經過各類試驗,找到了解決方案,即在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 \
$(cat /etc/hosts|awk -F ' ' '{if(NR>2){print "--add-host "$2":"$1}}') \
--name health_record8 \
172.21.97.152/tomcat/tomcat-de:4.0架構
說明app
重點是標紅內容,將hosts文件動態讀取,拼接成--add-host所要的格式,NR>2是過濾掉/etc/hosts文件中頭兩行(不是我想要的內容)。運維
缺點webapp
不能動態加載宿主機的hosts文件,若是宿主機的hosts文件發生變化,容器須要同步更新,必須刪除容器從新生成便可。測試
完善spa
此爲開啓容器時加參數方式,也可用其餘方式,如:
1)進入容器編輯hosts文件; # 臨時解決
2)修改容器默認的解析文件(即自定義hosts文件); # 將容器變成啓動後不去找/etc/hosts,而是找自定義的hosts文件