如何让不同的Docker容器相互交谈而不将端口暴露给全世界
我需要在受控的环境中testing我的kafka
消费者和消息触发器。 所以我做了一个创build一些模拟卡夫卡服务器的完美项目: mokafelk 。
它工作正常,除了安全是狗屎。 playbook
默认加速了一个3节点的dockerized
kafka
集群,但是kafka服务器上的侦听端口暴露给所有人。 以下是用于创build群集的Dockerfile
的jinja2
模板 。
基本上我希望容器能够互相交谈。 我不认为容器连接是一种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。