dotnetcore控制台应用程序:rabbitmq与docker连接被拒绝127.0.0.1:5672

时间:2018-01-20 21:38:43

标签: rabbitmq .net-core docker-compose console-application

来自控制台应用程序的兔子连接:

 var factory = new ConnectionFactory()
                {
                    HostName = Environment.GetEnvironmentVariable("RabbitMq/Host"),
                    UserName = Environment.GetEnvironmentVariable("RabbitMq/Username"),
                    Password = Environment.GetEnvironmentVariable("RabbitMq/Password")
                };

                using (var connection = factory.CreateConnection()) // GETTING ERROR HERE
                using (var channel = connection.CreateModel())
                {
                    channel.QueueDeclare(queue: "rss",
                                         durable: fa...

我收到此错误:

  

未处理的例外情况:   RabbitMQ.Client.Exceptions.BrokerUnreachableException:无   指定的端点是可达的--->   RabbitMQ.Client.Exceptions.ConnectFailureException:连接失败   ---> System.Net.Internals.SocketExceptionFactory + ExtendedSocketException:   连接被拒绝127.0.0.1:5672

我的docker-compose.yml文件:

version: '3'

services:
  message.api:
    image: message.api 
    build:
      context: ./message_api
      dockerfile: Dockerfile
    container_name: message.api
    environment:
      - "RabbitMq/Host=rabbit"
      - "RabbitMq/Username=guest"
      - "RabbitMq/Password=guest"
    depends_on:
      - rabbit

  rabbit:
    image: rabbitmq:3.7.2-management
    hostname: rabbit
    ports:
      - "15672:15672"
      - "5672:5672"

  rsscomparator:
    image: rsscomparator 
    build:
      context: ./rss_comparator_app
      dockerfile: Dockerfile
    container_name: rsscomparator
    environment:
      - "RabbitMq/Host=rabbit"
      - "RabbitMq/Username=guest"
      - "RabbitMq/Password=guest"
    depends_on:
      - rabbit

我使用的是dotnetcore控制台应用。当我在docker中使用这个应用程序时,我收到错误。我可以访问rabbitmq网络浏览器(http://192.168.99.100:15672),但应用无法访问。

1 个答案:

答案 0 :(得分:2)

您正在尝试从容器应用程序连接到rabbitmq应用程序。 您尝试在控制台应用容器中使用127.0.0.1:5672实现此目的。

但这指向此容器内的localhost,而不是指向主机上的localhost。

您使用相同的docker-compose部署服务而未指定网络设置,这意味着它们都部署在同一个docker bridge网络中。这将允许您使用容器或服务名称让容器相互通信。

因此,请尝试连接rabbit:5672而不是127.0.0.1:5672。此名称将转换为容器IP(172.xx.xx.xx),这意味着您将在容器之间创建专用连接。