Ошибка при запуске клиента RabbitMQ при выполнении команды docker-compose up - PullRequest
1 голос
/ 05 июля 2019

Я пытаюсь запустить docker-compose с двумя консольными приложениями ядра .net, имеющими зависимость от rabbitMQ, я использую Docker с Windows.

Я добавил в консольное приложение, как описано в официальных документах RabbitMQ https://www.rabbitmq.com/tutorials/tutorial-one-dotnet.html

За пределами обоих приложений я добавил docker-compose.yml

Структура папки:

1. Отправка

  1. Send.cs(как в документах RabbitMQ)
  2. Send.csproj
  3. Dockerfile

    FROM mcr.microsoft.com/dotnet/core/sdk:2.2 as build-env
    WORKDIR /app
    
    # Copy the project file and restore the dependencies
    COPY *.csproj ./
    RUN dotnet restore
    
    # Copy the remaining source files and build the application
    COPY . ./
    RUN dotnet publish -c Release -o out
    
    # Build the runtime image
    FROM mcr.microsoft.com/dotnet/core/sdk:2.2
    WORKDIR /app
    COPY --from=build-env /app/out .
    ENTRYPOINT ["dotnet", "Send.dll"]
    

2. Получить

  1. Recieve.cs (как в документах RabbitMQ)

  2. Recieve.csproj

  3. Dockerfile (То же, что и SenderDockerfile, кроме Send, заменен на Recieve)

3.Docker-compose.yml

  version: '3'

    services:
      rabbitmq:
        image: rabbitmq:3-management
        ports:
          - "5672:5672"
          - "15672:15672"
        container_name: rabbitmq
        hostname: my-rabbit
      Send:
        image: sender
        build:
          context: ./Send
          dockerfile: Dockerfile
        depends_on:
            - rabbitmq
      Reciever:
        image: reciever
        build:
          context: ./Recieve
          dockerfile: Dockerfile
        depends_on:
            - rabbitmq

Сгенерированная ошибка

Необработанное исключение: RabbitMQ.Client.Exceptions.BrokerUnreachableException: ни одна из указанных конечных точек не была доступна ---> System.AggregateException: Произошла одна или несколько ошибок.(Соединение не установлено) ---> RabbitMQ.Client.Exceptions.ConnectFailureException: Соединение не удалось ---> System.Net.Internals.SocketExceptionFactory + ExtendedSocketException: Соединение отклонено 127.0.0.1:5672

1 Ответ

2 голосов
/ 05 июля 2019

Для того чтобы контейнеры Docker могли взаимодействовать друг с другом, вам необходимо установить их в одной сети. На вашем docker-compose.yml добавьте следующее:

version: '3'
    services:
      rabbitmq:
        image: rabbitmq:3-management
        ports:
          - "5672:5672"
          - "15672:15672"
        container_name: rabbitmq
        hostname: my-rabbit
        networks:
          - my-network-name
      Send:
        image: sender
        build:
          context: ./Send
          dockerfile: Dockerfile
        depends_on:
            - rabbitmq
        networks:
          - my-network-name
      Reciever:
        image: reciever
        build:
          context: ./Recieve
          dockerfile: Dockerfile
        depends_on:
            - rabbitmq
        networks:
          - my-network-name
networks:
  my-network-name:
    driver: bridge

Как видите, все контейнеры находятся в одной сети, и они могут взаимодействовать следующим образом:

http://<container_name>:<port>

Итак, если вы хотите, чтобы Отправитель отправлял сообщение на RabbitMQ , тогда:

amqp://rabbitmq:5672

Если вы используете localhost в качестве IP-адреса внутри любого контейнера, он будет использовать свой интерфейс обратной связи, получая сам запрос.

...