《Disney +》 迪士尼、Marvel、彼思、星球大戰…  失落的龍絆2.5周年紀念!納姆頻道公布眾多活動情報!   《戰地風雲2042》於10月22日登陸PS4和PS5:首輪詳情   HYDE個人活動20週年紀念遊戲《HYDE RUN》正式發布日確定!同時公開遊戲內畫面預告!   3D拼圖解謎遊戲《Puzzling Places》即將登上PS VR!   大逃殺手遊「FINAL FANTASY VII THE FIRST SOLDIER」事前登錄人數突破100萬!   色彩繽紛!閃耀著彩虹光芒的電競滋露巧克力「大滋露〈Rainbow BOX〉」開賣!   「貓咪大戰爭」X「哥吉拉」聯名!全球巡迴 Twitter 企劃啟動!   勇者鬥惡龍主題樂園「DRAGON QUEST ISLAND 大魔王索瑪與起始之島」開幕日確定! 

Dockerfile 的 /etc/hosts 如何設定

商業

Docker (Dockerfile) 裡面想要設定 /etc/hosts,要怎麼做呢?

於 Dockerfile 撰寫,將外面的 /etc/hosts 蓋掉 Docker 裡面的,都還是無效,要怎麼做才可以把外部的 hosts 設定到裡面去呢?

Dockerfile 的 /etc/hosts 如何設定

Dockerfile reference 文件裡面,沒有看到 /etc/hosts 該怎麼改,後來發現 /etc/hosts 修改的方式還蠻黑暗的~

修改 /etc/hosts 的作法有兩種,先講比較正確的方法:

Docker 增加 hosts 可以參考 Docker run 的文件:Docker run reference

於 Docker run 使用 --add-host=server-name:127.0.0.1,多個用空白隔開,繼續寫下去即可,範例如下:

  • docker run ... --add-host='server:0.0.0.0' ...
  • docker run ... --add-host='server:127.0.0.1' --add-host='server2:127.0.0.2'...

若有 /etc/hosts 有太多需要增加,可以使用下述 Shell script 產生 --add-host 參數

  • cat /etc/hosts | sed 's/^#.//g' | grep '[0-9][0-9]' | tr "t" " " | awk '{print "--add-host="$2":"$1 }' | tr 'n' ' '

再來看比較暴力的作法:(直接寫在 Dockerfile 裡面)

# 使用 /tmp/hosts 當 /etc/hosts COPY /etc/hosts /tmp/hosts.bak
RUN cp hosts /tmp/hosts # hosts 於外部 cp /etc/hosts .
#RUN cp /etc/hosts /tmp/hosts #路径长度最好保持一致
RUN mkdir -p -- /lib-override && cp /lib/x86_64-linux-gnu/libnss_files.so.2 /lib-override
RUN sed -i 's:/etc/hosts:/tmp/hosts:g' /lib-override/libnss_files.so.2
ENV LD_LIBRARY_PATH /lib-override
RUN cat /tmp/hosts.bak >> /tmp/hosts

Docker 內部讀取 /etc/hosts 的部份,修改成讀取 /tmp/hosts (參考自此篇:Docker 修改 hosts)

將下述寫入 Dockerfile,於 build 的時候,就會讀取 /tmp/hosts 來操作囉~

相關網頁

Tsung

隨機商業新聞

Disney Plus