【问题标题】:How do I get two dockerized applications to talk on a given port?如何让两个 dockerized 应用程序在给定端口上通信?
【发布时间】:2020-06-04 19:03:53
【问题描述】:

根据我的 docker-compose.yml 文件,我正在尝试让两个 dockerized 应用程序在给定端口上相互通信。

他们能够在端口 app1:61001 和 app2:61002 上相互通信,但我的朋友告诉我他们应该能够在端口 80 上通信。例如.. app2:80,端口 61001 和 61002 应该只能是暴露在 swarm 之外的可访问端口。

应用程序本身设置为 server.port=80

知道如何按照我朋友的建议让它工作吗?

这是我正在使用的 docker-compose 文件:

码头工人撰写

version: "3.5" 

services: 
  app1: 
    image: docker.artifactory.gr.gr.com/app1:latest 
    ports: 
      - "61001:80" 
    deploy: 
      replicas: 2
    networks:
      - custom-network

  app2:
    image: docker.artifactory.gr.gr.com/app2:latest
    ports:
      - "61002:80"
    deploy:
      replicas: 2
    networks:
      - custom-network

networks:
  custom-network:

我的

【问题讨论】:

  • 你的朋友说得对,他们应该通过80端口进行内部通信,但我认为你必须在ports列表中公开它(即在外部映射上方添加- 80)。跨度>

标签: java docker docker-compose microservices


【解决方案1】:

首先,查看您的服务是否使用 docker-compose ps 命令公开端口 80。
如果是这种情况,只需删除两个服务的以下代码

    ports:
      - "61002:80"

如果没有,删除

    ports:
      - "61002:80"

并添加

    expose: 80

在您的应用脚本中,要调用一项服务,只需调用 appN:80

希望我能理解您的要求并帮助您

【讨论】:

    【解决方案2】:

    App1 和 App2 属于您命名为 custom-network 的同一网络。 这意味着容器使用的内部端口(右侧的 80 )在两个应用程序中都是可见的! 如果您必须从 APP 1 向 APP 2 调用服务,您只需使用

    命名容器
    hostname: app2 // do the same for the other container
    container_name: app2
    

    然后,您可以从 app1 调用应用程序,只需使用“app1:80/yourpath”即可。 暴露的端口在网络外部可见。

    此外: 您可以检查连接性,使用迭代 shell:https://gist.github.com/mitchwongho/11266726 连接到 app1 应用程序,然后执行

    ping app1
    

    您会看到 app1 有一个内部 IP 并且可以访问。

    【讨论】:

    • hostnamecontainer_name: 都不是容器间通信所必需的; Compose 将使服务块的名称可用作 DNS 名称。 Docker 文档中的Networking in Compose 有更多详细信息。
    • 是的,但在这种情况下,名称将由 docker 自动分配,或者不是?
    • 在原始问题的 docker-compose.yml 文件中,app1app2 将是容器可以用来相互联系的有效 DNS 名称。 Compose 还会分配一个容器名称,但您通常不需要它。
    • 好吧,这是真的;我错过了。缓慢而良好地阅读的能力被严重低估了。 tnx
    猜你喜欢
    • 2015-06-22
    • 2017-12-21
    • 1970-01-01
    • 2017-10-19
    • 2011-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-27
    相关资源
    最近更新 更多