Sockets RabbitMq在docker中运行时拒绝连接
我的docker compose文件如下所示: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
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>