首页 > 解决方案 > RabbitMq - Docker-compose - 如何修复“连接被拒绝 127.0.0.1:5672”异常

问题描述

我已经在 Stack Overflow 上尝试了几种可能的解决方案,但似乎没有什么对我有用。

我正在使用 RabbitMQ 开发微服务。该解决方案包含多个项目并且运行没有任何问题,但是一旦我使用docker-compose选项来构建项目,Visual Studio 就会引发以下异常:

RabbitMQ.Client.Exceptions.BrokerUnreachableException ExtendedSocketException:连接被拒绝 127.0.0.1:5672

在我的解决方案中,我有三个项目通过 RabbitMQ 相互通信。

下面是我的 YAML 文件的代码。

我的 docker-compose.yaml:

version: '3.4'

services:    
  rabbitmq:
    hostname: webnet
    image: rabbitmq:3.7.2-management
    ports:
      - "15672:15672"
      - "5672:5672"    
    networks:
      - webnet

  sql-server-db:
    container_name: sql-server-db
    image: microsoft/mssql-server-linux:2017-latest
    ports:
      - "1433:1433"
    environment:
      SA_PASSWORD: "customerdbalten@123"
      ACCEPT_EULA: "Y"
    networks:
      - webnet

  myproject.simulation.api:
    image: ${DOCKER_REGISTRY-}myprojectsimulationapi
    build:
      context: .
      dockerfile: myproject.Simulation.Api/Dockerfile
    links:
      - rabbitmq
    ports:
      - '5000'
    networks:
      - webnet

  myproject.updateservice.api:
    image: ${DOCKER_REGISTRY-}myprojectupdateserviceapi
    build:
      context: .
      dockerfile: myproject.updateservice.Api/Dockerfile
    links:
      - rabbitmq
      - sql-server-db
    ports:
      - '5050'
    networks:
      - webnet

  myproject.web:
    image: ${DOCKER_REGISTRY-}myprojectweb
    build:
      context: .
      dockerfile: MyProject.Web/Dockerfile
    links:
      - rabbitmq
    ports:
      - '5001'
    networks:
      - webnet

networks:
  webnet:
    driver: bridge

我的 Docker 文件:

我的 Dockerfile 如下所示:

FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM microsoft/dotnet:2.2-sdk AS build
WORKDIR /src
COPY 
MyProject.UpdateService.Api/MyProject.UpdateService.Api.csproj MyProject.UpdateService.Api/
COPY MyProject.Common/MyProject.Common.csproj MyProject.Common/
RUN dotnet restore MyProject.UpdateService.Api/MyProject.UpdateService.Api.csproj
COPY . .
WORKDIR /src/MyProject.UpdateService.Api
RUN dotnet build MyProject.UpdateService.Api.csproj -c Release -o /app

FROM build AS publish
RUN dotnet publish MyProject.UpdateService.Api.csproj -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "MyProject.UpdateService.Api.dll"]

我还创建了另一个简单的解决方案,只有两个项目——发送者和接收者——使用 RabbitMQ。此解决方案在 ing 时会引发相同的异常docker-compose,否则只会运行。YAML 文件只有自动生成的代码。

标签: dockerdocker-composerabbitmqasp.net-core-2.2

解决方案


从讨论中,我们发现 rabbitMQ 容器没有运行,因为主机上已经运行了 rabbitMQ 服务。

您有两个选择,停止主机 RabbitMQ 服务,然后尝试连接 rabbitMQ 容器。

Hostname: rabbitmq:5672

或者,如果您想连接 Host RabbitMQ 服务,那么您可以使用

Hostname: host.docker.internal
#or
Hostname: HOST_IP

我想从容器连接到主机上的服务

主机有一个不断变化的 IP 地址(如果您没有网络访问权限,则没有)。从 18.03 开始​​,我们的建议是连接到特殊的 DNS 名称“host.docker.internal”,它解析为主机使用的内部 IP 地址。这是出于开发目的,不适用于 Docker Desktop for Windows 之外的生产环境。

网关也可以通过gateway.docker.internal.

docker-for-windows-networking


推荐阅读