簡體   English   中英

Docker Swarm - 無法連接到其他容器,因為 IP 查找失敗

[英]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.network
  • 然后對於每個容器,我們使用docker create命令創建它,然后使用docker start命令啟動它。 我們使用-.network標志在創建時將容器附加到 overlay.network
  • 然后我們使用docker 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

我有一個類似的問題:我正在按照這個官方教程在兩個 Raspberry pi 3 上創建一個 docker swarm overlay.network 並且 ping 是不可能的,除非我在Github上找到答案:據我所知,似乎最新版本的高山(出於我忽略的原因)不適合 Raspberry pi 3 所以解決方案是使用版本 3.12.3,如下所示: sudo docker run -dit --name alpine1 -.network test1 alpine:3.12.3

希望這可以幫助某人:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM