RabbitMq - Docker-compose - Как исправить исключение «Соединение отклонено 127.0.0.1:5672» - PullRequest
0 голосов
/ 11 ноября 2019

Я боролся с этой проблемой уже несколько дней и перепробовал практически все возможные решения на StackOverflow, но мне кажется, что ничего не работает.

Я занимаюсь разработкой микросервисов с использованием 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:

Мой файл Docker выглядит следующим образом:

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,Это решение выдает то же exception, в то время как docker-composing, в противном случае оно просто запускается. Файл Yaml содержит только код auto-generated.

Буду очень признателен за любую помощь.

Заранее спасибо.

1 Ответ

1 голос
/ 14 ноября 2019

Из обсуждения мы выяснили, что контейнер 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 для Windows.

Шлюз также доступен как gateway.docker.internal.

docker-for-windows-сети

...