具有相同容器端口的多个 docker 个容器连接到同一网络
Multiple docker containers with same container port connected to the same network
我有一个依赖于多个 docker 容器的应用程序。我使用 docker 组合,以便它们都在同一个网络中进行容器间通信。但是,我的两个容器在各自的容器内侦听相同的端口 8080,但是映射到主机上的不同端口:8072,8073。对于容器间的通信,因为我们使用容器的端口,会不会有问题?
约束条件:
- 我的应用程序需要两个容器才能 运行。因此我无法将具有相同内部端口的另一个容器隔离到不同的网络
- 所有容器都应该 运行 在同一台主机上。
我是 docker 的新手,我不知道如何解决这个问题。
谢谢
IIUC 请参阅此处的文档:
https://docs.docker.com/compose/networking
您不需要在主机上公开每个服务的端口,除非您希望从主机访问它们,即在 docker-compose 创建的网络之外。
每个主机的端口必须是唯一的但是您的 docker-compose 创建的网络中的每个服务都可以使用相同的端口而不受惩罚,并且被 <service-name>:<port>
.
在 Docker 示例中,可能有 2 个 Postgres 服务。每个都需要一个唯一的名称:db1
; db2
但两者都可以使用相同的端口 - “5432”,并且可以从名为 web
的服务(以及彼此)作为 db1:8432
和 db2:8432
.[=31 进行唯一寻址=]
每个服务有效地对应于不同的主机。因此,只要每个服务|主机的端口都是唯一的,就可以了。而且,只要您在主机上公开的任何端口都是唯一的,您也很好....
扩展示例,db1
可以公开端口 9432:8432
,但是 db2
需要找到不同的主机端口来使用,也许 9433:8432
.
在 docker-compose 创建的网络中,您将访问 db1
作为 db1:8432
和 db2
作为 db2:8432
.
从主机(在 docker-compose create 网络之外),您将以 localhost:9432
的形式访问 db1
,以 localhost:9433
的形式访问 db2
。
NB 当必须从外部访问这些服务时(例如 web
可能必须公开但 dbX
可能不需要暴露)。您可能希望在调试时更加自由地公开服务端口。
我有一个依赖于多个 docker 容器的应用程序。我使用 docker 组合,以便它们都在同一个网络中进行容器间通信。但是,我的两个容器在各自的容器内侦听相同的端口 8080,但是映射到主机上的不同端口:8072,8073。对于容器间的通信,因为我们使用容器的端口,会不会有问题?
约束条件:
- 我的应用程序需要两个容器才能 运行。因此我无法将具有相同内部端口的另一个容器隔离到不同的网络
- 所有容器都应该 运行 在同一台主机上。
我是 docker 的新手,我不知道如何解决这个问题。
谢谢
IIUC 请参阅此处的文档: https://docs.docker.com/compose/networking
您不需要在主机上公开每个服务的端口,除非您希望从主机访问它们,即在 docker-compose 创建的网络之外。
每个主机的端口必须是唯一的但是您的 docker-compose 创建的网络中的每个服务都可以使用相同的端口而不受惩罚,并且被 <service-name>:<port>
.
在 Docker 示例中,可能有 2 个 Postgres 服务。每个都需要一个唯一的名称:db1
; db2
但两者都可以使用相同的端口 - “5432”,并且可以从名为 web
的服务(以及彼此)作为 db1:8432
和 db2:8432
.[=31 进行唯一寻址=]
每个服务有效地对应于不同的主机。因此,只要每个服务|主机的端口都是唯一的,就可以了。而且,只要您在主机上公开的任何端口都是唯一的,您也很好....
扩展示例,db1
可以公开端口 9432:8432
,但是 db2
需要找到不同的主机端口来使用,也许 9433:8432
.
在 docker-compose 创建的网络中,您将访问 db1
作为 db1:8432
和 db2
作为 db2:8432
.
从主机(在 docker-compose create 网络之外),您将以 localhost:9432
的形式访问 db1
,以 localhost:9433
的形式访问 db2
。
NB 当必须从外部访问这些服务时(例如 web
可能必须公开但 dbX
可能不需要暴露)。您可能希望在调试时更加自由地公开服务端口。