RabbitMq 在 docker 中运行时拒绝连接 [英] RabbitMq refuses connection when run in docker
问题描述
我的 docker-compose 文件如下所示:
My docker-compose file looks like this:
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 界面,但如果我尝试像这样从我的探索项目连接:
If I type http://localhost:15672 in the browser, I get the rabbitmq interface, but if I tries to connect from my Explore project like this:
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:5672System.Net.Sockets.Socket.EndConnect(IAsyncResult asyncResult)
ExtendedSocketException: Connection refused 127.0.0.1:5672 System.Net.Sockets.Socket.EndConnect(IAsyncResult asyncResult)
ConnectFailureException:连接失败RabbitMQ.Client.EndpointResolverExtensions.SelectOne(IEndpointResolver resolver, Func selector)
ConnectFailureException: Connection failed RabbitMQ.Client.EndpointResolverExtensions.SelectOne(IEndpointResolver resolver, Func selector)
BrokerUnreachableException: 没有一个指定的端点是可达的RabbitMQ.Client.ConnectionFactory.CreateConnection(IEndpointResolver endpointResolver, string clientProvidedName)
BrokerUnreachableException: None of the specified endpoints were reachable RabbitMQ.Client.ConnectionFactory.CreateConnection(IEndpointResolver endpointResolver, string clientProvidedName)
推荐答案
正如我在问题下的评论所暗示的那样,这是因为 web 应用程序部分中定义的本地主机"是它的容器本地主机,而不是 docker 主机..
As my comment under the question suggested, it's because the "localhost" defined in the web application part is it's containers localhost, and not the docker host..
只是需要改变
- "ElasticUrl=http://localhost:9200"
- "RabbitMq/Host=localhost"
到
- "ElasticUrl=http://elasticsearch:9200"
- "RabbitMq/Host=rabbit"
这篇关于RabbitMq 在 docker 中运行时拒绝连接的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!