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

问题描述 投票:1回答:1

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

约束:

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

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

谢谢

docker networking docker-compose port docker-networking
1个回答
2
投票

IIUC见文件:https://docs.docker.com/compose/networking

您不需要公开主机上的每个服务端口,除非您希望从主机访问它们,即在docker-compose创建的网络之外。

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

在Docker示例中,可能有2个Postgres服务。每个人都需要一个独特的名字:db1; db2但两者都可以使用相同的端口 - “5432”并且可以从web(以及彼此)的服务中唯一地寻址db1:8432db2:8432

每个服务有效地对应于不同的主机。因此,只要端口对于每个服务主机都是唯一的,那么您就是好的。并且,只要您在主机上公开的任何端口都是独一无二的,您也会很好....

扩展示例,db1可以暴露端口9432:8432但是然后db2需要找到一个不同的主机端口来使用,也许是9433:8432

在docker-compose创建的网络中,你可以访问db1作为db1:8432db2作为db2:8432

从主机(在docker-compose创建网络之外),您将访问db1作为localhost:9432db2作为localhost:9433

注意当这些服务必须可以从外部访问时,将服务端口暴露给主机可能是一个好习惯(例如,web可能必须暴露,但dbX可能不需要暴露)。您可能希望在调试时更公开地暴露服务端口。

© www.soinside.com 2019 - 2024. All rights reserved.