您好,登錄后才能下訂單哦!
本篇文章為大家展示了Docker中怎么對hosts進行修改,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
Docker修改hosts?這還不簡單,打開vim直接敲就完事兒了!然而事與愿違,事情沒有我們想的那么簡單。在很多場景中,比如我們需要搭建一個集群,這時候容器要識別集群內的節點,就需要添加相應的host解析。這時就需要修改容器的hosts文件,下面我們將會看到在Docker中自動化實現修改hosts不是那么簡單的事。
hosts文件其實并不是存儲在Docker鏡像中的,/etc/hosts, /etc/resolv.conf和/etc/hostname,是存在主機上的/var/lib/docker/containers/(docker_id)目錄下,容器啟動時是通過mount將這些文件掛載到容器內部的。因此如果在容器中修改這些文件,修改部分不會存在于容器的top layer,而是直接寫入這3個文件中。容器重啟后修改內容不存在的原因是Docker每次創建新容器時,會根據當前docker0下的所有節點的IP信息重新建立hosts文件。也就是說,你的修改會被Docker給自動覆蓋掉。
修改hosts一眼看上去是一件很容易的事,根據上面的分析其實不是那么簡單的,如果一個分布式系統在數十個節點上,每次重新啟動都要去修改hosts顯得很麻煩,如何解決這一問題,目前有以下辦法。
開啟容器時候添加參數—add-host machine:ip可以實現hosts修改,在容器中可以識別machine主機。缺點是很多個節點的話命令會很長,有點不舒服(當然,你可以寫一個腳本了)。
進入容器后可以用各種編輯器編輯修改hosts文件,這樣是最簡單粗暴的方式,缺點就是每次啟動容器都要修改一次。
在每個容器中開啟dnsmasq開負責局域網內的容器節點主機名解析,但是這種方式在跨物理機的時候,好像不是很方便(具體情況還沒有實踐過,挖坑日后再填)。可以參考一下kiwenlau的工作
我們可以想辦法讓容器開啟時候,不去找/etc/hosts文件,而是去找我們自己定義的hosts文件,下面是一個Dockerfile實例
1234567 | FROM ubuntu:14.04RUN cp /etc/hosts /tmp/hosts #路徑長度最好保持一致RUN mkdir -p -- /lib-override && cp /lib/x86_64-linux-gnu/libnss_files.so.2 /lib-overrideRUN sed -i 's:/etc/hosts:/tmp/hosts:g' /lib-override/libnss_files.so.2ENV LD_LIBRARY_PATH /lib-overrideRUN echo "192.168.0.1 node1" >> /tmp/hosts #可以隨意修改/tmp/hosts了... |
這樣修改后,容器每次啟動時就不去找/etc/hosts了,而是我們自己定義的/tmp/hosts,可以隨心所欲在其中修改了
以上問題可以用于跨主機部署分布式Docker集群,結合之前的跨物理機Docker網絡互聯,便可以實現快速高效部署分布式集群
原文鏈接:
https://wongxingjun.github.io
-更多文章-
Spring Cloud GateWay初體驗
Kubernetes基礎與架構
對業務系統的監控 No.118
Kubernetes對象模型
拜托!面試請不要再問我Spring Cloud底層原理
【性能優化之道】每秒上萬并發下的Spring Cloud參數優化實戰
Docker 核心技術與實現原理
學習別跟我談興趣 No.88
條件注解 @ConditionalOnBean 的正確使用姿勢
分布式事務的實現原理
條件注解 @ConditionalOnBean 的正確使用姿勢
上述內容就是Docker中怎么對hosts進行修改,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。