gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 12:07:18 26 4
gpt4 key购买 nike

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

约束:

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

  • 我是 docker 新手,我不知道如何解决这个问题。

    谢谢

    最佳答案

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

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

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

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

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

    扩展示例,db1可能暴露端口 9432:8432但随后 db2需要找到一个不同的主机端口来使用,也许是 9433:8432 .

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

    从主机(在 docker-compose 创建网络之外),您将访问 db1localhost:9432db2localhost:9433 .

    备注 当这些服务必须可以从外部访问时(例如 web 可能必须公开但 dbX 可能不需要公开),仅将服务端口公开给主机可能是一个好习惯。您可能希望在调试时更自由地公开服务端口。

    关于docker - 具有相同容器端口的多个 docker 容器连接到同一网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55192991/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com