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

时间:2019-03-16 02:48:55

标签: docker networking docker-compose port docker-networking

我有一个依赖多个Docker容器的应用程序。我使用docker compose,使它们都在同一网络中以进行容器间通信。但是,我的两个容器正在侦听它们各自容器内的相同端口8080,但被映射到主机上的不同端口:8072,8073。由于我们使用容器的端口进行容器间通信,这会引起问题吗?

约束:

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

是docker的新手,我不确定如何解决此问题。

谢谢

1 个答案:

答案 0 :(得分:2)

IIUC在此处查看文档: https://docs.docker.com/compose/networking

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

每个主机的端口必须是唯一的,但是您在docker-compose创建的网络中的每个服务都可以使用相同的端口,而不受惩罚,并由:。

引用。

在Docker示例中,可能有2个Postgres服务。每个人都需要一个唯一的名称:db1; db2,但是两者都可以使用相同的端口-“ 5432”,并且可以通过名为webdb1: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无需暴露)。您可能希望在调试时公开服务端口时更加自由。