如何让不同的Docker容器相互通信,而不会将端口暴露给整个世界

时间:2016-02-04 07:15:58

标签: docker apache-kafka docker-compose

我需要在受控环境中测试我的kafka消费者和消息触发器。所以我创建了一个ansible项目来创建一些模拟kafka服务器:mokafelk

除了安全性之外,它工作正常。 playbook默认情况下会旋转3个节点dockerized kafka群集,但kafka服务器上的侦听端口会向所有群集公开。以下是用于创建群集的Dockerfile的{​​{3}}。

基本上我希望容器能够相互通信。我不认为容器链接是一种选择,因为在我看来,链接只是单向的。但是使用127.0.0.1:{{ port }}:{{ port }}公开端口只会将端口暴露给托管计算机,如果我是正确的,则不会将端口暴露给其他容器。 0.0.0.0:{{ port }}:{{ port }}将端口暴露给整个世界。那我怎么能两种方式链接两个+容器?这一定是一个常见问题,但我似乎找不到快速解决方案......

1 个答案:

答案 0 :(得分:2)

这里详细解释了docker容器网络:https://docs.docker.com/engine/userguide/networking/dockernetworks/

简而言之:

默认情况下,docker守护程序会将网络适配器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。