【问题标题】:Communicate between two asp.net services with docker on same host在同一主机上使用 docker 在两个 asp.net 服务之间进行通信
【发布时间】:2019-01-04 22:07:16
【问题描述】:

我目前正在尝试在 docker 中托管我的两个 asp.net 核心服务。我能够让它们都启动并运行,但问题是我不知道如何在两个容器之间进行通信。

我正在使用 docker-compose 来启动和运行我的应用程序,并在我的主机上分配端口。

服务的 url 放置在 appsettings.json 中。我认为问题出在此处,因为我不知道从哪里获得正在运行的容器的正确 IP。

我已经尝试在这两个 docker-compose 文件中使用主机网络,但无法正常工作。

我还尝试使用 docker container inspect 获取容器的 IP。但这些 IP 无法访问。

服务 1 的 docker-compose:

version: '3.4'    
services:
  leave.api:
    build:
      context: .
      dockerfile: app1/Dockerfile
    environment:
  - ASPNETCORE_ENVIRONMENT=Development
ports:
  - 5002:5002

服务2的docker-compose:

version: '3.4'
services:
  backoffice:
    build:
      context: .
      dockerfile: BackOffice/Dockerfile
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
    ports:
      - 5001:5001

我希望找到一种能够在两个服务之间进行通信的方法。

【问题讨论】:

    标签: asp.net docker docker-compose


    【解决方案1】:

    您可以使用 external_links 选项,这似乎是您情况下最合适的解决方案: https://docs.docker.com/compose/compose-file/#external_links

    【讨论】:

      【解决方案2】:

      这解释了桥接容器https://docs.docker.com/v17.09/engine/userguide/networking/default_network/container-communication/

      如果您的通信是基于 http 的,我建议您使用 http 网关来跟踪您的容器及其服务端点。

      【讨论】:

        【解决方案3】:

        您可以使用服务名称在 docker 容器中的两个服务之间进行通信。

        在您的情况下,您的 docker 组合文件中有后台和 leave.api 服务。

        因此,您可以使用 https://backoffice:5001/ 从 leave.api 访问后台服务。

        【讨论】:

          【解决方案4】:

          感谢所有答案,但我找到了另一种最适合我情况的解决方案。

          我在我的两个 docker-compose 文件中添加了以下行:

          network_mode: bridge
          

          这样我的两个容器都使用同一个网络。之后,我可以使用我的主机 IP 地址和服务绑定的端口在容器之间进行通信。我把这个 IP 放在 appsettings.json 中,就像我以前一样。

          【讨论】:

            猜你喜欢
            • 2018-09-07
            • 2020-09-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-07-17
            • 2016-07-02
            • 2022-01-13
            • 2020-05-14
            相关资源
            最近更新 更多