我有一个依赖多个Docker容器的应用程序。我使用docker compose,使它们都在同一网络中以进行容器间通信。但是,我的两个容器正在侦听它们各自容器内的相同端口8080,但被映射到主机上的不同端口:8072,8073。由于我们使用容器的端口进行容器间通信,这会引起问题吗?
约束:
是docker的新手,我不确定如何解决此问题。
谢谢
答案 0 :(得分:2)
IIUC在此处查看文档: https://docs.docker.com/compose/networking
除非您希望从主机访问它们,即在docker-compose创建的网络之外,否则不必在主机上公开每个服务的端口。
每个主机的端口必须是唯一的,但是您在docker-compose创建的网络中的每个服务都可以使用相同的端口,而不受惩罚,并由:。
引用。在Docker示例中,可能有2个Postgres服务。每个人都需要一个唯一的名称:db1
; db2
,但是两者都可以使用相同的端口-“ 5432”,并且可以通过名为web
和db1:8432
的{{1}}服务(以及彼此)进行唯一寻址。
每个服务有效地对应于一个不同的主机。因此,只要每个主机的端口都是唯一的,那就好。而且,只要您在主机上公开的任何端口都是唯一的,那么您就很好。...
在示例中,db2:8432
可以公开端口db1
,但是9432:8432
需要找到另一个主机端口来使用,也许是db2
。
在由docker-compose创建的网络中,您将以9433:8432
的身份访问db1
,以db1:8432
的身份访问db2
。
从主机(在docker-compose创建网络外部),您将以db2:8432
的身份访问db1
,以localhost:9432
的身份访问db2
。
注意事项:仅当必须从外部访问服务端口时(例如,localhost:9433
可能必须公开但web
无需暴露)。您可能希望在调试时公开服务端口时更加自由。