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

具有相同容器端口的多个docker容器连接到同一网络,docker,networking,docker-compose,port,docker-networking,Docker,Networking,Docker Compose,Port,Docker Networking,我有一个应用程序,它依赖于多个docker容器。我使用docker compose,以便它们都在同一个网络中进行容器间通信。但是,我的两个容器在各自的容器中侦听同一端口8080,但映射到主机上的不同端口:80728073。对于集装箱间的通信,因为我们使用集装箱的港口,这会导致问题吗 限制条件: 我需要两个容器才能运行我的应用程序。因此,我无法将具有相同内部端口的其他容器隔离到不同的网络 所有容器应在同一主机上运行 我是docker的新手,我不知道如何解决这个问题 感谢您参见此处的文档: 您不需

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

限制条件:

  • 我需要两个容器才能运行我的应用程序。因此,我无法将具有相同内部端口的其他容器隔离到不同的网络
  • 所有容器应在同一主机上运行
  • 我是docker的新手,我不知道如何解决这个问题


    感谢您参见此处的文档:

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

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

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

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

    扩展示例,
    db1
    可以公开端口
    9432:8432
    ,但是
    db2
    需要找到一个不同的主机端口来使用,可能
    9433:8432

    在docker compose创建的网络中,您可以访问
    db1
    as
    db1:8432
    db2
    as
    db2:8432

    从主机(docker compose create网络之外)访问
    db1
    as
    localhost:9432
    db2
    as
    localhost:9433


    NB如果必须从外部访问服务端口(例如,
    web
    可能必须公开,但
    dbX
    可能不需要公开),则最好只向主机公开服务端口。您可能希望在调试时更自由地公开服务端口。

    IIUC请参阅此处的文档:您不需要公开主机上的每个服务端口,除非您希望从docker compose创建的网络外部访问它们。每个主机的端口必须是唯一的,但docker compose创建的网络中的每个服务都可以使用相同的端口,而不受惩罚,并由以下引用:。在Docker示例中,可能有2个Postgres服务。每个都需要一个唯一的名称:
    db1
    db2
    但两者都可以有
    端口-“5432”
    ,并且可以从
    web
    作为
    db1:8432
    db2:8432
    进行唯一寻址。因此,容器可以在docker网络中具有相同的端口,并且可以访问,而不会出现容器名称:port?的问题?。你的意思是我可以通过db1:5432和db2:5432访问它们?5432和5433是容器的内部端口,每个服务有效地对应于不同的主机。因此,只要每个服务主机的端口都是唯一的,就可以了。而且,只要您在主机上公开的任何端口都是唯一的,您也很好。。。。扩展我的示例,
    db1
    可以公开端口
    8432:8432
    ,但是
    db2
    需要找到一个不同的主机端口来使用,可能是
    8433:8432
    。我认为这将是一个很好的答案;)@DazWilkin您应该根据您的评论发布答案。iUC的意思是“如果我理解正确”