2017-02-14 42 views
3

當前碼頭版本:1.13.1, build 092cba3碼頭集裝箱內所有外部DNS查詢失敗

/etc/resolv.conf中的內容:

search mycompany.local 
nameserver 127.0.0.11 
options ndots:0 

(實際公司名稱混淆)。

nslookup對主機本身是100%的罰款,但從容器內的任何外部主機名看起來失敗(無法事件運行apt-get update)。 4節點羣集中的所有主機都存在相同的症狀。 請注意內部服務名稱解析似乎在容器之間工作。

直接在我的筆記本電腦上運行相同的應用程序(在同一辦公室網絡上)主機名解析得很好。

這正在變成一個緩慢移動的災難。

涉及的集羣仍然是1.12之前的版本,它可能有任何方向。

+0

好吧,我可以看到127.0.0.11的nameserver條目可能是(?)的問題。重複測試[從這裏](http://www.networkcomputing.com/data-centers/docker-networking-basic-dns-configuration/2052420654)給出一個工作容器。它可能是造成問題的碼頭構成? – demaniak

+0

哦,我的靈魂。經過這些努力,似乎主DNS服務器有一些令人頭疼的問題。在我們的支持人員重申dns服務後,突然之間再次開始工作。爲什麼我在主機上的nslookup測試沒有失敗 - 我不知道。 – demaniak

回答

0

在Linux中,lo或本地主機接口將具有地址127.0.0.1/8(即網絡掩碼255.0.0.0)。該掩碼覆蓋該整個範圍:

127.0.0.0 - 127.255.255.255 

由於127.0.0.11落入該範圍內,到該地址的連接將嘗試經由lo接口路線(容器),爲連接的路由。除非您的容器具有內部配置的地址有一個偵聽該地址的DNS解析器,否則會導致連接超時。

您或許可以通過將127.0.0.11路由到容器的主界面(例如eth0)或通過更改DNS解析器地址來解決此問題,使其位於127.0.0.0/8之外。

您也可以明確設置DNS服務器IP。

docker run --dns 1.2.3.4     # set one server 
docker run --dns 1.2.3.4 --dns 5.6.7.8 # set multiple servers 

或者使用泊塢窗 - compose.yml:

dns: 1.2.3.4 

dns: 
    - 1.2.3.4 
    - 5.6.7.8 
+0

感謝您的回覆。我相信你在技術上是正確的,但在完成[this]之後(http://www.networkcomputing.com/data-centers/docker-networking-basic-dns-configuration/2052420654),我很努力地想知道爲什麼我最終在/ etc/resolv.conf中使用127.0.0.11。啓動與該鏈接相同的容器(無需撰寫),正確的名稱服務器登陸resolv。另外,上週這一切仍然正常。唯一的主要變化是升級到碼頭1.13 – demaniak

+0

@demaniak 1.13容器系統上的名稱服務器IP是否爲127.0.0。*以外的其他名稱?通常,Linux主機系統上的名稱服務器IP只是簡單地傳遞給容器(至少在我的經驗中)。 –

+0

之前,我沒有理由在DNS內部嗅探,所以我可以肯定地說:主機本身在10.0.0。*範圍內具有合適的名稱服務器,並且dns正在工作。在此羣集中部署的此應用的所有容器都具有「127.0.0.11」名稱服務器(外部名稱解析失敗)。 hm,或者應該編輯問題來清楚起見:內部服務名稱解析實際上看起來很好。通常不認爲「DNS」本身。 – demaniak

0

這是我使用的設置:

  1. 安裝的dnsmasq。
  2. 運行echo interface=docker0 > /etc/dnsmasq.d/docker
  3. 重新啓動dnsmasq。
  4. 添加--dns 172.17.0.1你泊塢窗運行或泊塢窗守護程序(它添加到DOCKER_OPTS在/ etc /默認/泊塢窗變量或編輯/ lib中ExecStart指令/systemd/system/docker.service)。
  5. 重新啓動Docker。

現在,您已將所有容器指向Dnsmasq作爲DNS解析器。另外一個優點是在/ etc/hosts中的條目中也可以解析。