从 Docker 容器到本地主机的 Rabbitmq 连接被拒绝 [英] Rabbitmq connection refused from Docker container to local host

查看:411
本文介绍了从 Docker 容器到本地主机的 Rabbitmq 连接被拒绝的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个运行 java 进程的 docker 容器,我试图连接到在我的本地主机上运行的 rabbitmq.

到目前为止,我已经完成了以下步骤:

在我的本地机器上(运行 Docker 版本 1.13.0-rc3 的 macbook,构建 4d92237 并关闭防火墙)

  1. 我已经更新了我的 rabbitmq_env.conf 文件以删除 RABBITMQ_NODE_IP_ADDRESS,所以我没有绑定到通过 localhost 进行连接,并且我有一个管理员 rabbitmq 用户.(不尝试访客用户)
  2. 我在本地机器上通过 telnet 进行了测试,没有任何问题 telnet <local-ip>5672

在我的 docker 容器内

  1. 能够 ping 本地 IP 和 curl rabbitmq admin apicurl -i -u username:password http://local-ip:15672/api/vhosts 返回成功

    <块引用>

    [{"name":"/","tracing":false}]

  2. 当我尝试从容器内远程登录时,我得到了

    <块引用>

    连接被外部主机关闭"

  3. 查看 rabbitmq.logs

    =错误报告====关闭 AMQP 连接 <0.30526.1> (local-ip:53349 -> local-ip:5672):{handshake_timeout,handshake}

我的 java stacktrace 很有帮助

<块引用>

原因:java.net.ConnectException:连接被拒绝(连接>拒绝)在 java.net.PlainSocketImpl.socketConnect(本机方法)在 >java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)在 >java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.>java:206)在 >java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)在 java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)在 java.net.Socket.connect(Socket.java:589)在 >com.rabbitmq.client.impl.FrameHandlerFactory.create(FrameHandlerFactory.ja>va:32)在 >com.rabbitmq.client.impl.recovery.RecoveryAwareAMQConnectionFactory.newCon>nection(RecoveryAwareAMQConnectionFactory.java:35)

docker network inspect bridge

<块引用>

[{名称":桥",ID":716f935f19a107225650a95d06eb83d4c973b7943b1924815034d469164affe5",创建":2016-12-11T15:34:41.950148125Z",范围":本地",司机":桥",启用 IPv6":假,IPAM":{驱动程序":默认",选项":空,配置":[{子网":172.17.0.0/16",网关":172.17.0.1"}]},内部":错误,可附加":假,容器":{9722a49c4e99ca5a7fabe56eb9e1c71b117a1e661e6c3e078d9fb54d7d276c6c":{名称":测试","EndpointID": "eedf2822384a5ebc01e5a2066533f714b6045f661e24080a89d04574e654d841","MacAddress": "02:42:ac:11:00:02",IPv4地址":172.17.0.2/16",IPv6地址":"}},选项": {com.docker.network.bridge.default_bridge":真",com.docker.network.bridge.enable_icc":真",com.docker.network.bridge.enable_ip_masquerade":真",com.docker.network.bridge.host_binding_ipv4":0.0.0.0",com.docker.network.bridge.name":docker0",com.docker.network.driver.mtu":1500"},标签": {}}]

我错过了什么?

解决方案

对我来说这很好用!

<块引用>

我已经安装了镜像docker pull rabbitmq:3-management

然后运行

docker run -d --hostname haroldjcastillo --name rabbit-server -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin2017 -p 5672:5672 -p 15672:15672 rabbitmq:3-management

<块引用>

最重要的是添加连接和管理端口-p 5672:5672 -p 15672:15672

在 docker 中与您相见

docker-machine ip

在我的情况下返回:

192.168.99.100

去管理http://192.168.99.100:15672

<块引用>

对于 Spring Boot,您可以配置此项或适用于其他连接

spring.rabbitmq.host=192.168.99.100spring.rabbitmq.username=adminspring.rabbitmq.password=admin2017spring.rabbitmq.port=5672

最好的祝福

I have a docker container running a java process that I am trying to connect to rabbitmq running on my localhost.

Here are the steps I've done so far:

On my Local machine (macbook running Docker version 1.13.0-rc3, build 4d92237 with firewall turned off)

  1. I've updated my rabbitmq_env.conf file to remove RABBITMQ_NODE_IP_ADDRESS so I am not tied to connect via localhost and i have an admin rabbitmq user. (not trying with guest user)
  2. I tested this via telnet on my local machine and have no issues telnet <local-ip> 5672

Inside my docker container

  1. able to ping local-ip and curl rabbitmq admin api curl -i -u username:password http://local-ip:15672/api/vhosts returns sucessfully

    [{"name":"/","tracing":false}]

  2. When i try to telnet from inside the container I get

    "Connection closed by foreign host"

  3. looking at the rabbitmq.logs

    =ERROR REPORT==== closing AMQP connection <0.30526.1> (local-ip:53349 -> local-ip:5672): {handshake_timeout,handshake}

My java stacktrace incase helpful

Caused by: java.net.ConnectException: Connection refused (Connection >refused) at java.net.PlainSocketImpl.socketConnect(Native Method) at >java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) at >java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.>java:206) at >java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) at java.net.Socket.connect(Socket.java:589) at >com.rabbitmq.client.impl.FrameHandlerFactory.create(FrameHandlerFactory.ja>va:32) at >com.rabbitmq.client.impl.recovery.RecoveryAwareAMQConnectionFactory.newCon>nection(RecoveryAwareAMQConnectionFactory.java:35)

docker network inspect bridge

[ { "Name": "bridge", "Id": "716f935f19a107225650a95d06eb83d4c973b7943b1924815034d469164affe5", "Created": "2016-12-11T15:34:41.950148125Z", "Scope": "local", "Driver": "bridge", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": null, "Config": [ { "Subnet": "172.17.0.0/16", "Gateway": "172.17.0.1" } ] }, "Internal": false, "Attachable": false, "Containers": { "9722a49c4e99ca5a7fabe56eb9e1c71b117a1e661e6c3e078d9fb54d7d276c6c": { "Name": "testing", "EndpointID": "eedf2822384a5ebc01e5a2066533f714b6045f661e24080a89d04574e654d841", "MacAddress": "02:42:ac:11:00:02", "IPv4Address": "172.17.0.2/16", "IPv6Address": "" } }, "Options": { "com.docker.network.bridge.default_bridge": "true", "com.docker.network.bridge.enable_icc": "true", "com.docker.network.bridge.enable_ip_masquerade": "true", "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", "com.docker.network.bridge.name": "docker0", "com.docker.network.driver.mtu": "1500" }, "Labels": {} } ]

What am I missing?

解决方案

for me this works fine!

I have been installed the image docker pull rabbitmq:3-management

and run

docker run -d --hostname haroldjcastillo --name rabbit-server -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin2017 -p 5672:5672 -p 15672:15672 rabbitmq:3-management

the most important is to add the connection and management ports -p 5672:5672 -p 15672:15672

See you host in docker

docker-machine ip

return in my case:

192.168.99.100

Go to management http://192.168.99.100:15672

For Spring Boot you can configure this or works good for another connections

spring.rabbitmq.host=192.168.99.100
spring.rabbitmq.username=admin
spring.rabbitmq.password=admin2017
spring.rabbitmq.port=5672

Best wishes

这篇关于从 Docker 容器到本地主机的 Rabbitmq 连接被拒绝的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆