具有连接到同一网络的同一集装箱端口的多个码头集装箱 [英] Multiple docker containers with same container port connected to the same network

查看:30
本文介绍了具有连接到同一网络的同一集装箱端口的多个码头集装箱的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

约束:

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

我不熟悉docker,我不确定如何解决此问题。

谢谢

推荐答案

iUC请参阅此处的文档: https://docs.docker.com/compose/networking

除非您希望从主机(即在docker-compose创建的网络外部)访问服务的每个端口,否则不需要公开主机上的每个服务端口。

每台主机的端口必须是唯一的由docker组成的网络中的每个服务都可以使用相同的端口而不受惩罚,并由:引用。

在Docker示例中,可能有2个postgres服务。每个都需要唯一的名称:db1db2,但两者都可以使用相同的端口-"5432",并且可以从名为web(以及彼此)的服务中唯一寻址为db1:8432db2:8432

每个服务有效地对应于不同的主机。因此,只要端口对于每个服务|主机都是唯一的,您就可以了。而且,只要您在主机上公开的任何端口都是唯一的,您也可以.

扩展该示例,db1可能暴露端口9432:8432,但随后db2将需要查找其他主机端口来使用,可能是9433:8432

在docker-compose创建的网络中,您将访问db1db1:8432db2db2:8432

从主机(在docker-compose create network之外),您将访问db1ASlocalhost:9432db2ASlocalhost:9433

NB当服务端口必须可以从外部访问时(例如,web可能必须公开,但dbX可能不需要公开),可能只向主机公开这些服务端口是一种好做法。您可能希望在调试时更自由地公开服务端口。

这篇关于具有连接到同一网络的同一集装箱端口的多个码头集装箱的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆