2016-02-04 79 views
1

我需要在受控環境中測試我的kafka消費者和消息觸發器。所以我做了一個ansible項目來創建一些模擬kafka服務器:mokafelk如何讓不同的Docker容器相互對話而不將端口暴露給全世界

它工作正常,除了安全是狗屎。默認情況下,playbook會啓動一個3節點dockerizedkafka羣集,但kafka服務器上的偵聽端口會暴露給所有羣集。以下是用於創建羣集的Dockerfilejinja2 template

基本上我希望容器能夠互相交談。我不認爲容器鏈接是一種選擇,因爲在我看來,鏈接只是單向的。但是使用127.0.0.1:{{ port }}:{{ port }}暴露端口只會將端口暴露給主機,並且如果我是正確的,則不會將端口暴露給其他容器。 0.0.0.0:{{ port }}:{{ port }}將該端口展示給全世界。那麼,我怎麼能連接兩個+容器?這必須是一個常見的問題,但我似乎還沒有找到一個快速的解決方案......

回答

2

泊塢窗容器聯網在這裏詳細解釋說:https://docs.docker.com/engine/userguide/networking/dockernetworks/

簡而言之:

默認情況下搬運工守護將一個網絡適配器docker0添加到主機系統(它試圖猜測一個可用IP,通常使用172.17.0.1)。你可以在$ ifconfig看到這個。

默認情況下,所有容器都以增量IP連接到此網絡。您可以通過$ docker inspect <container name>檢查容器網絡設置。

所以有很好的機會你的碼頭工人羣集的IP地址如下:
kafka1 172.17.0.2
kafka2 172.17.0.3
kafka3 172.17.0.4
elasticsearch 172.17.0.5
kibana 172.17.0.6

然後,您可以從主機系統和容器中訪問172.17.0.2:9092,172.17.0.3:9092,172.17.0.4:9092處的kafkas。

+0

謝謝隊友的答案我hv從來沒有嘗試過,但使IP地址硬編碼內腳本是不好的做法,以及沒有?它還假設沒有其他容器在運行開始時運行 – lingxiao

+1

只需閱讀您發佈的鏈接。我不知道用戶定義的'docker'網絡。它似乎是一個新功能。 'docker network create --driver bridge isolated_nw'創建一個新的網絡,並且在這個用戶定義的網絡中創建所有的容器將允許它們通過名稱自動相互通信,這在默認網橋網絡中不受支持。 – lingxiao

相關問題