[英]Docker Swarm - Unable to connect to other containers because IP lookup fails
假設我們使用 docker 群提供一個 overlay.network 並創建具有以下名稱的各種容器:
現在,如果我們嘗試從另一個容器 ping 任何容器,它會失敗,因為它不知道如何進行 IP 查找,即,alice 不知道 bob 的 IP 等等。 我們一直在通過手動編輯每個容器上的/etc/hosts
並在該文件中輸入名稱/IP 鍵值對來解決這個問題,但是隨着每次重新啟動 our.network,這變得非常乏味。 應該有更好的方法來處理這個問題。
例如,使用 docker 堆棧創建的服務不會遇到此問題。 由於各種原因,我們堅持使用 vanilla docker create
創建容器。 我們如何才能讓容器在 overlay.network 上相互發現而不需要手工編輯/etc/hosts
?
以下是我們目前必須遵循的詳細工作流程:
docker swarm
和 overlay.networkdocker create
命令創建它,然后使用docker start
命令啟動它。 我們使用-.network
標志在創建時將容器附加到 overlay.networkdocker container inspect
獲取每個容器的 IP 地址。 這涉及運行n
命令並記下 IP 地址。/etc/hosts
文件並輸入其他容器的(名稱,IP)鍵值對。 所以這意味着在跨容器求和時必須手動輸入n*(n-1)
條記錄。 不知道為什么docker create
不會自動執行所有這些 - docker 已經知道(或可以知道)所有 IP 地址。 例如,使用 docker 堆棧配置的容器不必通過此手動過程 go 來“發現”彼此。 我們不能使用docker棧的原因是:
docker cp
)並且無法使用堆棧執行此操作您可能已經看到了: 用戶上的DNS定義了網絡
看來,所需要的僅僅是通過他們的指容器{name}.{network}
,而不是僅僅在{name}
。 無需編輯/etc/hosts
或使用--add-host
標志或運行其他DNS服務器。 請參閱https://forums.docker.com/t/need-help-connecting-containers-in-swarm-mode/77944/6
更多詳細信息:docker的官方文檔在任何地方都沒有提及在{containername}
添加.{network}
后綴的必要性。 實際上,在此鏈接中,即演練下的步驟#7,沒有使用.{network}
后綴。 所以不確定為什么我們需要這樣做。 我們正在使用的18.06.1-ce
版本是Linux的18.06.1-ce
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.