我有一个依赖于多个 Docker 容器的应用程序。我使用 docker compose,以便所有这些都位于同一网络中以进行容器间通信。但是,我的两个容器正在各自容器内侦听相同的端口 8080,但是映射到主机上的不同端口:8072,8073。对于容器间通信,由于我们使用容器的端口,这会导致问题吗?
限制条件:
- 我需要这两个容器来运行我的应用程序。因此我无法将具有相同内部端口的其他容器隔离到不同的网络
- 所有容器应在同一主机上运行。
我是 Docker 新手,我不知道如何解决这个问题。
Thanks
IIUC 请参阅此处的文档:https://docs.docker.com/compose/networking https://docs.docker.com/compose/networking
您不需要在主机上公开每个服务的端口,除非您希望从主机访问它们,即在 docker-compose 创建的网络之外。
每个主机的端口必须是唯一的butdocker-compose 创建的网络中的每个服务都可以使用相同的端口而不受惩罚,并由<service-name>:<port>
.
在 Docker 示例中,可能有 2 个 Postgres 服务。每个都需要一个唯一的名称:db1
; db2
但两者都可以使用相同的端口 - “5432”,并且可以从名为的服务中唯一地寻址web
(以及彼此)作为db1:8432
and db2:8432
.
每个服务实际上对应于不同的主机。因此,只要每个服务|主机的端口都是唯一的,就可以了。而且,只要您在主机上公开的任何端口都是唯一的,您也很好......
扩展这个例子,db1
可能会暴露端口9432:8432
但是之后db2
也许需要找到一个不同的主机端口来使用9433:8432
.
在 docker-compose 创建的网络中,您可以访问db1
as db1:8432
and db2
as db2:8432
.
从主机(在 docker-compose create 网络之外),您可以访问db1
as localhost:9432
and db2
as localhost:9433
.
NB当必须从外部访问这些服务时(例如,仅向主机公开服务端口)可能是一个好习惯。web
可能必须暴露但是dbX
可能不需要暴露)。您可能希望在调试时更自由地公开服务端口。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)