標籤:目的 項目 dock shell指令碼 進入容器 samba 倉庫 解決方案 cal
前言
公司一直在用傳統的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 \
$(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
說明
重點是標紅內容,將hosts檔案動態讀取,拼接成--add-host所要的格式,NR>2是過濾掉/etc/hosts檔案中頭兩行(不是我想要的內容)。
缺點
不能動態載入宿主機的hosts檔案,如果宿主機的hosts檔案發生變化,容器需要同步更新,必須刪除容器重建即可。
完善
此為開啟容器時加參數方式,也可用其他方式,如:
1)進入容器編輯hosts檔案; # 臨時解決
2)修改容器預設的解析檔案(即自訂hosts檔案); # 將容器變成啟動後不去找/etc/hosts,而是找自訂的hosts檔案
Docker容器載入宿主機的hosts解析