sockets - RabbitMq 在 docker 中运行时拒绝连接

标签 sockets rabbitmq .net-core docker-compose

我的 docker-compose 文件如下所示:

version: '2'

services:
  explore:
    image: explore
    build:
      context: ./Explore
      dockerfile: VsDockerfile
    environment:
      - "ElasticUrl=http://localhost:9200"
      - "RabbitMq/Host=localhost"
      - "RabbitMq/Username=guest"
      - "RabbitMq/Password=guest"
    networks:
      - localnet

  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:5.4.3
    container_name: elasticsearch
    environment:
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ports:
      - 9200:9200
    volumes:
      - ./esdata:/usr/share/elasticsearch/data
    networks:
      - localnet

  rabbit:
    image: rabbitmq:3.6.7-management
    hostname: rabbit
    ports:
      - 15672:15672
      - 5672:5672
    networks:
      - localnet

networks:
  localnet:
    external:
      name: localnet

如果我输入 http://localhost:15672在浏览器中,我得到了rabbitmq界面,但是如果我尝试从我的Explore项目进行连接,如下所示:

public SqlToRabbitProcessor(SqlToRabbitRepository sqlToRabbitRepository)
{
    _sqlToRabbitRepository = sqlToRabbitRepository;

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

    var rabbit = factory.CreateConnection();
    channel = rabbit.CreateModel();
}

然后就断线了

var rabbit = factory.CreateConnection();

错误提示

ExtendedSocketException:连接被拒绝 127.0.0.1:5672 System.Net.Sockets.Socket.EndConnect(IAsyncResult asyncResult)

ConnectFailureException:连接失败 RabbitMQ.Client.EndpointResolverExtensions.SelectOne(IEndpointResolver解析器,Func选择器)

BrokerUnreachableException:无法访问指定的端点 RabbitMQ.Client.ConnectionFactory.CreateConnection(IEndpointResolver endpointResolver, string clientProvidedName)

最佳答案

正如我在问题下的评论所暗示的那样,这是因为 Web 应用程序部分中定义的“localhost”是它的容器本地主机,而不是 docker 主机。

只需要改变

- "ElasticUrl=http://localhost:9200"
- "RabbitMq/Host=localhost"

- "ElasticUrl=http://elasticsearch:9200"
- "RabbitMq/Host=rabbit"

关于sockets - RabbitMq 在 docker 中运行时拒绝连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44925747/

相关文章:

networking - 将单个端口用于多个套接字的标准方法?

c - Gethostbyaddr 在 Linux 中失败,但在 Windows 机器上工作

python - 在多个Python进程之间共享RabbitMQ channel

javascript - 无法在 JavaScript 中创建 Vue Router 实例

msbuild - MSBuild 是否支持 .Net Core 项目

c - TCP/IP : message got by recv() in order without keep buffer

php 更改套接字中请求的 ip

connection - RabbitMQ客户端无法连接到远程RabbitMQ服务器

junit - 为什么每次都重新创建带有 RabbitMQ 的测试容器并且不在测试之间共享

c# - 使用CAP时如何设置RabbitMQ队列前缀