RabbitMQ client throwing error while running docker-compose up command

主宰稳场 提交于 2021-02-11 04:25:25

问题


I am trying to run docker-compose with two .net core console applications having dependency of rabbitMQ, I am using Docker with Windows.

I have added to console application, as described on RabbitMQ official docs https://www.rabbitmq.com/tutorials/tutorial-one-dotnet.html

Outside of both applications I have added docker-compose.yml

Folder structure:

1. Send

  1. Send.cs (as it is in RabbitMQ docs)
  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. Recieve

  1. Recieve.cs (as it is in RabbitMQ docs)

  2. Recieve.csproj

  3. Dockerfile (Same as Sender Dockerfile except Send replaced with 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

Error Thrown

Unhandled Exception: RabbitMQ.Client.Exceptions.BrokerUnreachableException: None of the specified endpoints were reachable ---> System.AggregateException: One or more errors occurred. (Connection failed) ---> RabbitMQ.Client.Exceptions.ConnectFailureException: Connection failed ---> System.Net.Internals.SocketExceptionFactory+ExtendedSocketException: Connection refused 127.0.0.1:5672


回答1:


For making Docker containers able to communicate with each other, you need to set them in the same network. On your docker-compose.yml add the following:

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

As you can see, all the containers are in the same network, and they can communicate in the next way:

http://<container_name>:<port>

So if you want the Sender sends a message to RabbitMQ then:

amqp://rabbitmq:5672

If you use localhost as an IP inside any container, it will use its loopback interface, receiving the request itself.




回答2:


Victor's answer was also helpful but, problem was the rabbitmq starting later, while send and receiver started before.

While I restarted the same stopped sender and receiver container, it was working as expected(because the rabbitmq container was up). So I have added the retry policies on container, found from here.

The final version of my docker-compose file is looking like below, and is working fine. version: '3' services:

  rabbitmq:
    image: rabbitmq:3-management
    ports:
      - "5672:5672"
      - "15672:15672"
    container_name: rabbitmq
    hostname: my-rabbit
    networks:
      - my-network-name
    healthcheck:
        test: ["CMD", "curl", "-f", "http://localhost:15672"]
        interval: 30s
        timeout: 10s
        retries: 5

  Send:
    image: sender
    build:
      context: ./Send
      dockerfile: Dockerfile
    depends_on:
        - rabbitmq
    restart: on-failure
    networks:
      - my-network-name
    links: 
        - rabbitmq

  Reciever:
    image: reciever
    build:
      context: ./Recieve
      dockerfile: Dockerfile
    depends_on:
        - rabbitmq
    restart: on-failure
    networks:
      - my-network-name
    links: 
        - rabbitmq
networks:
  my-network-name:
    driver: bridge


来源:https://stackoverflow.com/questions/56901780/rabbitmq-client-throwing-error-while-running-docker-compose-up-command

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!