IIUC在此处查看文档: https://docs.docker.com/compose/networking
您不需要公开主机上的每个服务端口,除非您希望从主机访问它们,即在docker-compose创建的网络之外。
端口必须是每个主机唯一的 但 您的docker-compose创建的网络中的每个服务都可以使用相同的端口而不受惩罚,并通过以下方式引用:
在Docker示例中,可能有2个Postgres服务。每个都需要一个唯一的名称: db1 ; db2 但是两者都可以使用相同的端口 - “5432”并且可以从被叫服务中唯一地寻址 web (和彼此)as db1:8432 和 db2:8432 。
db1
db2
web
db1:8432
db2:8432
每个服务有效地对应于不同的主机。因此,只要端口对于每个服务主机都是唯一的,那么您就是好的。并且,只要您在主机上公开的任何端口都是独一无二的,您也会很好....
扩展示例, db1 可能暴露端口 9432:8432 但是之后 db2 可能需要找到一个不同的主机端口 9433:8432 。
9432:8432
9433:8432
在docker-compose创建的网络中,您将访问 db1 如 db1:8432 和 db2 如 db2:8432 。
从主机(在docker-compose创建网络之外),您将访问 db1 如 localhost:9432 和 db2 如 localhost:9433 。
localhost:9432
localhost:9433
的 NB 强> 当必须可以从外部访问这些服务时,将服务端口暴露给主机可能是一种好的做法(例如, web 可能必须暴露但是 dbX 可能不需要暴露)。您可能希望在调试时更公开地暴露服务端口。
dbX