一尘不染

如何让不同的Docker容器彼此通信而又不将端口暴露给整个世界

docker

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

它可以正常工作,但安全性很差。在playbook旋转了3个节点dockerized
kafka通过默认的簇但卡夫卡服务器上的监听端口暴露在所有。这里是jinja2模板Dockerfile用于创建集群。

基本上,我希望容器能够相互通信。我不认为容器链接是一种选择,因为在我看来链接只是一种方式。但是,127.0.0.1:{{ port }}:{{ port }}如果我正确的话,只使用暴露端口即可将端口暴露给主机,而不会暴露给其他容器。0.0.0.0:{{ port }}:{{ port }}将港口暴露在全世界。那么如何将两种以上的容器链接在一起呢?这肯定是一个普遍的问题,但我似乎找不到快速解决方案…


阅读 334

收藏
2020-06-17

共1个答案

一尘不染

此处详细说明了Docker容器网络:https//docs.docker.com/engine/userguide/networking/dockernetworks/

简而言之:

默认情况下,docker
daemon将网络适配器docker0添加到主机系统(它尝试猜测可用的IP,通常使用172.17.0.1)。您可以在中看到此内容$ ifconfig

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

因此,您的
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的kafka。

2020-06-17