具有连接到同一网络的同一集装箱端口的多个码头集装箱 [英] Multiple docker containers with same container port connected to the same network
问题描述
我有一个依赖于多个码头容器的应用程序。我使用docker compose,以便它们都在同一个网络中进行容器间通信。但是,我的两个容器在各自的容器内侦听相同的端口8080,但是映射到主机上的不同端口:8072,8073。对于容器间通信,因为我们使用容器的端口,这会导致问题吗?
约束:
- 我需要两个容器才能运行我的应用程序。因此,我无法将具有相同内部端口的其他容器隔离到不同的网络
- 所有容器应在同一主机上运行。
我不熟悉docker,我不确定如何解决此问题。
谢谢
推荐答案
iUC请参阅此处的文档: https://docs.docker.com/compose/networking
除非您希望从主机(即在docker-compose创建的网络外部)访问服务的每个端口,否则不需要公开主机上的每个服务端口。
每台主机的端口必须是唯一的但由docker组成的网络中的每个服务都可以使用相同的端口而不受惩罚,并由:引用。
在Docker示例中,可能有2个postgres服务。每个都需要唯一的名称:db1
;db2
,但两者都可以使用相同的端口-"5432",并且可以从名为web
(以及彼此)的服务中唯一寻址为db1:8432
和db2:8432
。
扩展该示例,db1
可能暴露端口9432:8432
,但随后db2
将需要查找其他主机端口来使用,可能是9433:8432
。
在docker-compose创建的网络中,您将访问db1
为db1:8432
和db2
为db2:8432
。
从主机(在docker-compose create network之外),您将访问db1
ASlocalhost:9432
和db2
ASlocalhost:9433
。
NB当服务端口必须可以从外部访问时(例如,web
可能必须公开,但dbX
可能不需要公开),可能只向主机公开这些服务端口是一种好做法。您可能希望在调试时更自由地公开服务端口。
这篇关于具有连接到同一网络的同一集装箱端口的多个码头集装箱的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!