我目前正在尝试在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
我希望找到一种能够在两个服务之间进行通信的方法。
答案 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中。