1. 程式人生 > >Docker容器加載宿主機的hosts解析

Docker容器加載宿主機的hosts解析

doc name 文件 自定義日誌 項目 har 進入容器 主機 刪除

前言

  公司一直在用傳統的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解析