与同一主机上的docker在两个asp.net服务之间进行通信

时间:2019-01-04 10:28:48

标签: asp.net docker docker-compose

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

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

服务的网址位于appsettings.json中。我认为问题出在这里,因为我不知道从哪里获得运行中容器的正确IP。

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

我还尝试通过使用docker容器检查来获取容器的IP。但是这些IP无法访问。

docker-compose of service 1:

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

docker-compose of service 2:

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

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

4 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

在您的情况下,您的docker组成文件中有backoffice和Leave.api服务。

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

答案 3 :(得分:0)

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

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

network_mode: bridge

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