我正在构建一个使用docker compose在本地运行的微服务解决方案。 我使用.netcore作为服务。 当我使用visual studio运行项目时,一切都连接并正常工作但是当我在docker中运行时,我可以从外部连接到服务,但服务无法相互连接。当我在docker中检查时,一切看起来都正常,所有容器都打开同一个网络。我假设它是一些小的设置或配置我不知道但是找不到任何有同样问题的人。
这是docker-compose代码
docker-compose.yml
version: '3'
services:
underrule.frontend:
image: underrule.frontend
build:
context: ./UnderRule.FrontEnd
dockerfile: Dockerfile
underrule.apigateway:
image: underrule.apigateway
build:
context: ./UnderRule.ApiGateway
dockerfile: Dockerfile
underrule.authentication:
image: underrule.authentication
build:
context: ./UnderRule.Authentication
dockerfile: Dockerfile
underrule.playerservice:
image: underrule.playerservice
build:
context: ./UnderRule.PlayerService
dockerfile: Dockerfile
underrule.registrationservice:
image: underrule.registrationservice
build:
context: ./UnderRule.RegistrationService
dockerfile: Dockerfile
underrule.worldservice:
image: underrule.worldservice
build:
context: ./UnderRule.WorldService
dockerfile: Dockerfile
docker-compose.override.yml
version: '3'
services:
underrule.frontend:
environment:
- ASPNETCORE_ENVIRONMENT=Development
ports:
- "5000:80"
underrule.apigateway:
environment:
- ASPNETCORE_ENVIRONMENT=Development
ports:
- "9000:80"
underrule.authentication:
environment:
- ASPNETCORE_ENVIRONMENT=Development
ports:
- "5001:80"
underrule.playerservice:
environment:
- ASPNETCORE_ENVIRONMENT=Development
ports:
- "5002:80"
underrule.registrationservice:
environment:
- ASPNETCORE_ENVIRONMENT=Development
ports:
- "5004:80"
underrule.worldservice:
environment:
- ASPNETCORE_ENVIRONMENT=Development
ports:
- "5003:80"
all dockerfiles are basically the same
FROM microsoft/aspnetcore:2.0
ARG source
WORKDIR /app
EXPOSE 80
COPY ${source:-obj/Docker/publish} .
ENTRYPOINT ["dotnet", "UnderRule.ApiGateway.dll"]
有什么想法吗?我没有太多运气,试图弄乱港口。
我在内部使用HttpClient与路径连接 http://localhost:{端口}
非常感谢帮助,如果您需要更多信息,请与我们联系。
答案 0 :(得分:0)
在容器中,localhost指向容器本身而不是桥接网络。
当你使用docker-compose时,你应该指向docker-compose.yml文件中定义的容器名称(例如 underrule.worldservice - > http://underrule.worldservice:port)。
另一种方法是指向docker bridge network ip。在Linux上,此IP默认为172.17.0.1。在Windows上,它取决于您运行的docker的版本,您应该检查您的配置(ipconfig
)。