【发布时间】:2017-04-26 15:14:35
【问题描述】:
我有一个运行 java 进程的 docker 容器,我试图连接到在我的本地主机上运行的 rabbitmq。
到目前为止,我已经完成了以下步骤:
在我的本地机器上(运行 Docker 版本 1.13.0-rc3 的 macbook,构建 4d92237 并关闭防火墙)
- 我已经更新了我的 rabbitmq_env.conf 文件以删除 RABBITMQ_NODE_IP_ADDRESS,所以我没有绑定到通过 localhost 进行连接,并且我有一个管理员 rabbitmq 用户。 (不尝试访客用户)
- 我在本地机器上通过 telnet 对此进行了测试,没有出现任何问题
telnet <local-ip> 5672
在我的 docker 容器内
-
能够 ping 本地 IP 和 curl rabbitmq admin api
curl -i -u username:password http://local-ip:15672/api/vhosts返回成功[{"name":"/","tracing":false}]
-
当我尝试从容器内远程登录时,我得到了
“连接被外部主机关闭”
-
查看 rabbitmq.logs
=错误报告==== 关闭 AMQP 连接 (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” }, “标签”: {} } ]
我错过了什么?
【问题讨论】:
-
local-ip到底是什么?您能否在容器运行时粘贴docker ps的输出以及docker inspect? -
这是我的本地 IP 地址,即 192.168.1.XXX
-
docker ps 容器 ID 图像命令创建状态端口名称 9722a49c4e99 e9096fc4f5ff "/bin/sh" 3 小时前 2 小时 5672/tcp, 7888/tcp 测试