当前位置: 首页 > 知识库问答 >
问题:

具有相同容器端口的多个docker容器连接到同一网络

孟洋
2023-03-14

我有一个依赖于多个docker容器的应用程序。我使用docker撰写,以便所有容器都在同一个网络中进行容器间通信。但是,我的两个容器在各自的容器中监听相同的端口8080,但是映射到主机上的不同端口: 8072,8073。对于集装箱间的通信,因为我们使用集装箱的端口,这会引起问题吗?

限制条件:

  1. 我需要两个容器才能运行我的应用程序。因此,我无法将具有相同内部端口的其他容器隔离到不同的网络
  2. 所有容器都应该在同一台主机上运行

我是新来的docker,我不知道如何解决这个问题。

谢啦

共有1个答案

舒枫涟
2023-03-14

IIUC请参见此处的文档:https://docs.docker.com/compose/networking

除非您希望从主机(即docker compose创建的网络外部)访问服务的每个端口,否则不需要在主机上公开这些端口。

每个主机的端口必须是唯一的,但docker compose创建的网络中的每个服务都可以使用同一个端口,而不受惩罚,并由以下引用:。

在Docker示例中,可能有两个Postgres服务。每个都需要一个唯一的名称:db1db2,但两者都可以使用相同的端口——“5432”,并且可以从名为web(以及彼此)的服务中唯一寻址,如db1:8432db2:8432

每个服务有效地对应于不同的主机。因此,只要每个服务|主机的端口都是唯一的,就可以了。而且,只要您在主机上公开的任何端口都是唯一的,您也很好。。。。

扩展该示例,db1可能会公开端口9432:8432,但随后db2需要找到不同的主机端口来使用,可能是9433:8432

在docker compose创建的网络中,您可以访问db1asdb1:8432db2asdb2:8432

从主机(docker compose create网络之外)可以访问db1aslocalhost:9432db2aslocalhost:9433

注意:只有当服务端口必须从外部访问时,才向主机公开服务端口可能是一个好的做法(例如,web可能必须公开,但dbX可能不需要公开)。您可能希望在调试时更自由地公开服务端口。

 类似资料:
  • 在Ubuntu 20.04上运行新的Docker 20.10.1。此版本包括对主机的支持。码头工人。Linux上dockerd中的内部 我在使用SSL证书的容器中运行了一系列服务,我想使用Telegraf(稍后发送到Grafana仪表板)检查证书是否过期。 所有带有网络接口和Telegraf的服务都运行在同一个Docker主机上。所有服务都在自己的网桥网络中。我想在端口9000上从Telegraf

  • 我有三个tomcat容器运行在不同的网桥网络与不同的子网和网关例如: 这些容器在不同的端口上运行,如8081, 8082, 8083 有没有办法在同一个8081中运行所有三个容器?如果可能的话,我怎么能在docker做呢。

  • 我试图对多个主机运行使用相同名称的容器运行ansible playbook。有3台主机,每个主机运行一个名为“Web”的容器。我在试着用docker连接。

  • 由于ES的docker容器,我面临一个奇怪的问题,我之前在9200主机端口的docker容器中运行独立的ES 7.10(内部docker端口与标准9200和9300 ES端口相同),同时,我启动了三个ES docker容器(有一个不同的小版本7)(它们应该组成集群,让我们把它命名为docker ES集群)。 这三个ES docker容器使用的主机端口为9200、92019202,因此,由于端口冲突

  • 我正在使用wurstmeister的docker-kafka项目在容器中运行kafka/zoomaster。我使用docker-comup将容器localhost作为变量。 我已经编写了一个Java应用程序,它使用flink连接并使用这个Kafka容器的一个主题。如果我导出一个可运行的罐子,并从我的机器上运行它,它绝对可以正常工作。当我创建下面的图像以从另一个docker容器运行jar时,我在线程

  • 我正在尝试为不同的环境设置一个带有docker-comment的Redis。因此,我需要在同一个端口上公开两个带有traefik的域: 域。通讯:6379 我无法在容器上公开这些端口,因为它们运行在同一台服务器上。 我的docker compose文件(用于域开发人员)如下所示: 我还尝试将treafik配置为使用以下endpoint: 当连接到“domain-dev.com:6379”时,无法断