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

t. *_*MAZ 6 console-application rabbitmq .net-core docker-compose

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

 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...
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

未处理的异常: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
Run Code Online (Sandbox Code Playgroud)

我正在使用 dotnetcore 控制台应用程序。当我在 docker 中使用此应用程序时,出现错误。我可以访问 rabbitmq 网络浏览器(http://192.168.99.100:15672)但应用程序无法访问。

lvt*_*llo 5

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

但这是指向该容器内的本地主机,而不是主机上的本地主机。

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

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