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

前言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文件

相關文章
相關標籤/搜索