如何让不同的Docker容器相互交谈而不将端口暴露给全世界

我需要在受控的环境中testing我的kafka消费者和消息触发器。 所以我做了一个创build一些模拟卡夫卡服务器的完美项目: mokafelk 。

它工作正常,除了安全是狗屎。 playbook默认加速了一个3节点的dockerized kafka集群,但是kafka服务器上的侦听端口暴露给所有人。 以下是用于创build群集的Dockerfilejinja2模板 。

基本上我希望容器能够互相交谈。 我不认为容器连接是一种select,因为在我看来,连接只是单向的。 但是,使用127.0.0.1:{{ port }}:{{ port }}公开一个端口只会将端口暴露给宿主机器,并且如果我是正确的,则不会将该端口暴露给其他容器。 0.0.0.0:{{ port }}:{{ port }}将端口暴露给整个世界。 那么我怎么能连接两个+容器两种方式? 这一定是一个常见的问题,但我似乎没有find一个快速的解决scheme…

docker集装箱联网在这里详细解释: https : //docs.docker.com/engine/userguide/networking/dockernetworks/

简而言之:

默认情况下,docker守护进程将一个networking适配器docker0添加到主机系统(它试图猜测一个可用的IP,通常使用172.17.0.1)。 你可以在$ ifconfig看到这个。

默认情况下,所有容器都以增量IP连接到此networking。 您可以通过$ docker inspect <container name>容器networking设置。

所以很可能你的docker集群的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。