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

Multiple docker containers with same container port connected to the same network

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

约束条件:

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

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

谢谢

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

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

每个主机的端口必须是唯一的但是您的 docker-compose 创建的网络中的每个服务都可以使用相同的端口而不受惩罚,并且被 <service-name>:<port>.

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

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

扩展示例,db1 可以公开端口 9432:8432,但是 db2 需要找到不同的主机端口来使用,也许 9433:8432.

在 docker-compose 创建的网络中,您将访问 db1 作为 db1:8432db2 作为 db2:8432.

从主机(在 docker-compose create 网络之外),您将以 localhost:9432 的形式访问 db1,以 localhost:9433 的形式访问 db2

NB 当必须从外部访问这些服务时(例如 web 可能必须公开但 dbX 可能不需要暴露)。您可能希望在调试时更加自由地公开服务端口。