当前位置: 首页 > 面试题库 >

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

陈瀚玥
2023-03-14
问题内容

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

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

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


问题答案:

此处详细说明了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。



 类似资料:
  • 问题内容: 我正在尝试使用Docker容器运行PostgreSQL服务器,并从主机上与之连接。 我的配置是: 主机:Mac OS X 10.10.5 Docker 1.10.1 我已经做到了: 第1步 :为永久Postgres数据创建一个卷 步骤2 :启动postgres实例 更新 :如注释中所建议,我在运行容器时指定了端口映射 步骤3 :通过执行以下操作连接到Docker实例: 但是我只想通过以

  • 本文向大家介绍Docker动态给容器Container暴露端口操作,包括了Docker动态给容器Container暴露端口操作的使用技巧和注意事项,需要的朋友参考一下 查看Container的IP地址 docker inspect <container name or id>| grep IPAddress 查看Container的映射的端口 用iptables查看容器映射情况 iptables

  • 我知道在linux主机系统上使用pulse audio是可能的,但是< code>paprefs是为Linux而不是mac构建的。

  • 我正在尝试用Docker和Selenium Grid建立一个自动化测试平台。在下图中,你可以看到我使用的结构。最上面是运行在计算引擎上的ubuntu服务器。左边是一个运行ubuntu 14.04的docker容器。该容器使用Google App Engine在localhost:8080上运行我们的项目。右边是Selenium集线器,有两个节点在端口4444上运行。 Docker和Selenium

  • 问题内容: 我有几个Docker容器,还有一个特例,其中两个必须互相交谈,因此它们必须通过链接最多彼此了解。我可以将一个容器链接到另一个容器,但是问题是,我不能告诉他们第二个容器可以与第一个容器对话。 我尝试创建并运行第一个容器并将其停止,然后创建了第二个容器并同时将其停止。接下来,我再次启动了第一个容器并链接到第二个容器,并启动了第二个容器并链接到第一个容器。此后,我的机器发疯了,docker进

  • 问题内容: 我必须使用docker-compose设置一个mongo副本集。对于副本集,容器必须彼此了解。 我试过了 我收到一个循环导入消息。但是,如果删除到dbreplicasetpart1的反向链接,则无法从dbreplicasetpart2 ping到dbreplicasetpart1。解决办法是什么? 问题答案: 为Docker 1.10更新 Docker 1.10允许在compose文件