Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets RabbitMq在docker中运行时拒绝连接_Sockets_Rabbitmq_.net Core_Docker Compose - Fatal编程技术网

Sockets RabbitMq在docker中运行时拒绝连接

Sockets RabbitMq在docker中运行时拒绝连接,sockets,rabbitmq,.net-core,docker-compose,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" - "Ra

我的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
如果我在浏览器中键入,我将获得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.EndpointResolveX.SelectOne(IEndpointResolver解析器、Func选择器)

BrokerRunReachableException:指定的终结点都不可访问
RabbitMQ.Client.ConnectionFactory.CreateConnection(IEndpointResolver endpointResolver,string clientProvidedName)

正如我在问题下的评论所建议的,这是因为web应用程序部件中定义的“localhost”是它的容器localhost,而不是docker主机

只是需要改变

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


我和docker compose也有同样的问题

我用主机名解决了这个问题:

  rabbit:
    hostname: rabbit
    command: sh -c "rabbitmq-plugins enable rabbitmq_management; rabbitmq-server"
    image: rabbitmq
    environment:
      RABBITMQ_DEFAULT_USER: admin
      RABBITMQ_DEFAULT_PASS: admin
    ports:
        - 5672:5672
        - 15672:15672

请按照此操作说明进行操作

只是为了让那些偶然发现这个问题的人受益。--link特性现在被认为是遗留特性,是docker不推荐使用的主要候选特性。 最简单的方法是使用

取决于: 为此,建议首先创建这样的网络“


嗯,我认为问题在于,在我的web容器中,我称之为localhost,而不是Hosts localhost,而是容器
  rabbit:
    hostname: rabbit
    command: sh -c "rabbitmq-plugins enable rabbitmq_management; rabbitmq-server"
    image: rabbitmq
    environment:
      RABBITMQ_DEFAULT_USER: admin
      RABBITMQ_DEFAULT_PASS: admin
    ports:
        - 5672:5672
        - 15672:15672
docker network create <network_name>