蘇奕翔
在日常使用Docker構建微服務架構的過程中,我們經常會遇到一個問題:多個容器之間是如何通過名字互相訪問的?DNS是怎么做到的?
從底層機制講清楚Docker的DNS系統(tǒng)
1.容器間通信的前提:同一個網絡
Docker默認會創(chuàng)建一個叫bridge的網橋網絡。所有未指定網絡的容器,都會被分配到這個bridge網絡中。
在這個默認網絡中,雖然每個容器都有一個獨立的IP地址,但要實現通過容器名訪問其他容器,就必須依賴Docker提供的DNS服務。
??注意:只有在用戶自定義的bridge網絡中,容器名解析才默認開啟!默認的bridge網絡不支持容器名解析!
2.Docker的內置DNS是如何工作的?
Docker在每個容器啟動時,會將容器的/etc/resolv.conf文件指向一個特殊的DNS地址:127.0.0.11
這個地址并不是真的公網DNS,而是DockerDaemon內置的DNS服務器。
這個DNS有以下作用:
解析外部域名(比如訪問百度、Google)
解析容器內部服務名(比如web,db等容器名)
它的背后是Docker的embeddedDNSserver,工作機制大概如下:
1??容器發(fā)出DNS查詢請求(查某個服務名)
2??請求發(fā)到127.0.0.11(docker的內部DNS)
3??DockerDNS根據網絡配置,找到對應容器的IP地址
4??將結果返回給發(fā)起請求的容器
3.實驗驗證:容器名訪問是否生效?
我們創(chuàng)建一個自定義網絡,并啟動兩個容器測試下
#創(chuàng)建一個自定義bridge網絡dockernetworkcreatemynet#啟動容器A,名字叫webdockerrun-it--rm--nameweb--networkmynetbusyboxsh#啟動容器B,在這個網絡中嘗試pingwebdockerrun-it--rm--networkmynetbusyboxsh
在B容器中輸入:
pingweb
你會發(fā)現,DNS能自動解析出web的IP,這就說明Docker的內置DNS正常工作啦
4.自定義服務名(別名)怎么設置?
有時候我們希望容器訪問的名字不是容器名,而是我們指定的服務名。Docker也支持這一點:
dockerrun-it--rm\--networkmynet\--namemydb\--network-aliasdatabase\busyboxsh
然后在其他容器中,就可以通過database這個名字訪問它
5.與外部DNS的協(xié)同
Docker的embeddedDNS并不是萬能的,它在無法解析服務名時,會把請求轉發(fā)給/etc/resolv.conf中指定的上游DNS。
這意味著:
外部網絡訪問正常(比如你容器內pingwww.baidu.com)
內部容器名也能解析
DockerDNS是中間層代理
這個設計非常巧妙!兼顧了內外網的域名解析。
6.容器DNS失效的常見問題
?沒有使用自定義網絡,導致DNS解析失敗
?使用了host網絡,容器直接共享宿主機網絡,無法使用Docker的DNS
?被resolv.conf修改或者掛載了宿主機DNS文件
?某些VPN環(huán)境導致容器DNS路由異常
解決方法建議:
盡量使用自定義bridge網絡
檢查/etc/resolv.conf是否被覆蓋
檢查Docker網絡配置dockernetworkinspect
總結
Docker容器之間的DNS解析,其實是靠DockerDaemon內置的DNS服務(監(jiān)聽在127.0.0.11)來實現的,它能讓容器通過服務名互相訪問,還支持alias、自定義網絡、多級域名等能力。
小說:無外掛靠實力拼殺,他率萬軍爭霸,終成游戲霸主
第6本:《網游之混跡在美女工作室》作者:射虎字數:114w 狀態(tài):連載本書說:你敢相信這是2007年上架的一本書,沒錯這本書太監(jiān)了————。哇,你是不知道當時多少人想給作者寄刀片,講的是主角是一個游戲超級高手,然后因為一些原因進入了一個美女工作室,成為她們的奶媽|-。但是主角告訴你,就算作為奶媽,那也是高手,不比其還有呢?
真實網游世界,美女工作室的熱血奮斗,看主角如何混跡其中!
第四部、《網游之天下無雙》,作者:失落葉,類別:游戲虛擬網游,字數:2001.56萬(已完本)標簽:網游,爽文,熱血簡介:主角丁舒升失業(yè)后,意外從救下的美女凌雪那里,得到網絡游戲《靈慟》的頭盔,被凌雪推薦加入雪月工作室__。進入游戲后依靠操作和運氣,自身在工作室也擁有了一定的地位。獲得第一枚建幫令,建立有幫助請點贊。
小說:電競圈攪屎棍被排擠?路崖青一笑,萬千粉絲成掛件求躺贏
第九本《網游之精靈道士》作者:京流云字數:196.7萬主角進入游戲后選擇的職業(yè)是可以轉職劍仙的道士,結果在完成新手任務后意外的被傳送到了西方精靈大陸,而東西方是不互通的,無奈之下主角也只能在四方廝混了下去,結果在這個東方玩家萬馬齊喑的游戲里陰差陽錯的成為了最后的希望。其發(fā)展領地,建設軍團,在領地后面會介紹_。
來源:紅網
作者:英升榮
編輯:勾慶
本文為紅辣椒評論 原創(chuàng)文章,僅系作者個人觀點,不代表紅網立場。轉載請附原文出處鏈接和本聲明。