Docker容器无法相互连接

时间:2018-02-09 23:05:51

标签: docker .net-core docker-compose microservices

我正在构建一个使用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:{端口}

非常感谢帮助,如果您需要更多信息,请与我们联系。

1 个答案:

答案 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)。