張筠君
在日常使用Docker構(gòu)建微服務(wù)架構(gòu)的過程中,我們經(jīng)常會遇到一個問題:多個容器之間是如何通過名字互相訪問的?DNS是怎么做到的?
從底層機(jī)制講清楚Docker的DNS系統(tǒng)
1.容器間通信的前提:同一個網(wǎng)絡(luò)
Docker默認(rèn)會創(chuàng)建一個叫bridge的網(wǎng)橋網(wǎng)絡(luò)。所有未指定網(wǎng)絡(luò)的容器,都會被分配到這個bridge網(wǎng)絡(luò)中。
在這個默認(rèn)網(wǎng)絡(luò)中,雖然每個容器都有一個獨(dú)立的IP地址,但要實(shí)現(xiàn)通過容器名訪問其他容器,就必須依賴Docker提供的DNS服務(wù)。
??注意:只有在用戶自定義的bridge網(wǎng)絡(luò)中,容器名解析才默認(rèn)開啟!默認(rèn)的bridge網(wǎng)絡(luò)不支持容器名解析!
2.Docker的內(nèi)置DNS是如何工作的?
Docker在每個容器啟動時,會將容器的/etc/resolv.conf文件指向一個特殊的DNS地址:127.0.0.11
這個地址并不是真的公網(wǎng)DNS,而是DockerDaemon內(nèi)置的DNS服務(wù)器。
這個DNS有以下作用:
解析外部域名(比如訪問百度、Google)
解析容器內(nèi)部服務(wù)名(比如web,db等容器名)
它的背后是Docker的embeddedDNSserver,工作機(jī)制大概如下:
1??容器發(fā)出DNS查詢請求(查某個服務(wù)名)
2??請求發(fā)到127.0.0.11(docker的內(nèi)部DNS)
3??DockerDNS根據(jù)網(wǎng)絡(luò)配置,找到對應(yīng)容器的IP地址
4??將結(jié)果返回給發(fā)起請求的容器
3.實(shí)驗(yàn)驗(yàn)證:容器名訪問是否生效?
我們創(chuàng)建一個自定義網(wǎng)絡(luò),并啟動兩個容器測試下
#創(chuàng)建一個自定義bridge網(wǎng)絡(luò)dockernetworkcreatemynet#啟動容器A,名字叫webdockerrun-it--rm--nameweb--networkmynetbusyboxsh#啟動容器B,在這個網(wǎng)絡(luò)中嘗試pingwebdockerrun-it--rm--networkmynetbusyboxsh
在B容器中輸入:
pingweb
你會發(fā)現(xiàn),DNS能自動解析出web的IP,這就說明Docker的內(nèi)置DNS正常工作啦
4.自定義服務(wù)名(別名)怎么設(shè)置?
有時候我們希望容器訪問的名字不是容器名,而是我們指定的服務(wù)名。Docker也支持這一點(diǎn):
dockerrun-it--rm\--networkmynet\--namemydb\--network-aliasdatabase\busyboxsh
然后在其他容器中,就可以通過database這個名字訪問它
5.與外部DNS的協(xié)同
Docker的embeddedDNS并不是萬能的,它在無法解析服務(wù)名時,會把請求轉(zhuǎn)發(fā)給/etc/resolv.conf中指定的上游DNS。
這意味著:
外部網(wǎng)絡(luò)訪問正常(比如你容器內(nèi)pingwww.baidu.com)
內(nèi)部容器名也能解析
DockerDNS是中間層代理
這個設(shè)計非常巧妙!兼顧了內(nèi)外網(wǎng)的域名解析。
6.容器DNS失效的常見問題
?沒有使用自定義網(wǎng)絡(luò),導(dǎo)致DNS解析失敗
?使用了host網(wǎng)絡(luò),容器直接共享宿主機(jī)網(wǎng)絡(luò),無法使用Docker的DNS
?被resolv.conf修改或者掛載了宿主機(jī)DNS文件
?某些VPN環(huán)境導(dǎo)致容器DNS路由異常
解決方法建議:
盡量使用自定義bridge網(wǎng)絡(luò)
檢查/etc/resolv.conf是否被覆蓋
檢查Docker網(wǎng)絡(luò)配置dockernetworkinspect
總結(jié)
Docker容器之間的DNS解析,其實(shí)是靠DockerDaemon內(nèi)置的DNS服務(wù)(監(jiān)聽在127.0.0.11)來實(shí)現(xiàn)的,它能讓容器通過服務(wù)名互相訪問,還支持alias、自定義網(wǎng)絡(luò)、多級域名等能力。
《安徒生童話》手抄報
第十張安徒生童話手抄報:簡約風(fēng)格,榮獲一等獎_——。安徒生童話手抄報內(nèi)容選擇《海的女兒》小人魚為了追求與陸地王子共度一生的夢想,不惜用美妙的嗓音和三百年生命換取巫婆的藥酒,使自己擁有了一雙如刀割般的美麗雙腳。然而,當(dāng)她眼看著心愛的王子與他人結(jié)婚時,她選擇了犧牲自己的生命,只為給王子最深的祝福?!缎〉任依^續(xù)說。
安徒生童話思維導(dǎo)圖手抄報 286
對于手抄報的邊框和背景設(shè)計,可以采用與童話相符的元素,如用蕾絲和花朵圍繞邊緣,或者用水彩輕輕涂抹出夢幻的背景色-。這樣的設(shè)計能讓整張手抄報看起來更為和諧而完整_-。制作一個安徒生童話手抄報的關(guān)鍵在于對故事的理解、美觀的布局設(shè)計、以及生動的插圖|-。通過以上步驟的指導(dǎo),你可以創(chuàng)作出一個既漂亮又有童趣的手抄報好了吧!
格林童話與安徒生童話手抄報制作指南:含繪畫建議與示例
安徒生童話的思維導(dǎo)圖之旅將思維導(dǎo)圖與安徒生童話相結(jié)合,303班的同學(xué)們展現(xiàn)出了驚人的創(chuàng)造力_。他們巧妙地運(yùn)用藝術(shù)元素,激發(fā)出思維的火花,制作出一幅幅精美的手抄報——|。這些作品不僅展示了孩子們出色的邏輯思維能力,更體現(xiàn)了他們良好的自我梳理知識的習(xí)慣。接下來,就讓我們一起領(lǐng)略這些優(yōu)秀作品的魅力吧。豐富多彩的到此結(jié)束了?。
來源:紅網(wǎng)
作者:吳湘生
編輯:前智宸
本文為紅辣椒評論 原創(chuàng)文章,僅系作者個人觀點(diǎn),不代表紅網(wǎng)立場。轉(zhuǎn)載請附原文出處鏈接和本聲明。