我有一个运行java进程的docker容器,我正在尝试连接到在localhost上运行的rabbitmq。
以下是我到目前为止所做的步骤:
在我的本地计算机上(运行Docker版本1.13.0-rc3的macbook,在关闭防火墙的情况下构建4d92237)
telnet <local-ip> 5672
在我的泊坞窗容器内
能ping ping local-ip和curl rabbitmq admin api
curl -i -u username:password http://local-ip:15672/api/vhosts
成功返回
[{ “名称”: “/”, “跟踪”:假}]
当我尝试从容器内部远程登录时,我得到了
“连接被外国主机关闭”
查看rabbitmq.logs
=错误报告==== 关闭AMQP连接&lt; 0.30526.1&gt; (local-ip:53349 - &gt; local-ip:5672): {handshake_timeout,握手}
我的java stacktrace有用
引起:java.net.ConnectException:拒绝连接(连接&gt;拒绝) at java.net.PlainSocketImpl.socketConnect(Native Method) at&gt; java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) at&gt; java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl。&gt; java:206) at&gt; java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) 在java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) 在java.net.Socket.connect(Socket.java:589) at&gt; com.rabbitmq.client.impl.FrameHandlerFactory.create(FrameHandlerFactory.ja&gt; va:32) 在&gt; com.rabbitmq.client.impl.recovery.RecoveryAwareAMQConnectionFactory.newCon&gt; nection(RecoveryAwareAMQConnectionFactory.java:35)
docker network inspect bridge
[ { “名字”:“桥”, “Id”:“716f935f19a107225650a95d06eb83d4c973b7943b1924815034d469164affe5”, “Created”:“2016-12-11T15:34:41.950148125Z”, “范围”:“本地”, “司机”:“桥”, “EnableIPv6”:false, “IPAM”:{ “司机”:“默认”, “选项”:null, “配置”:[ { “子网”:“172.17.0.0/16”, “网关”:“172.17.0.1” } ] }, “内部”:错误, “可附着”:虚假, “容器”:{ “9722a49c4e99ca5a7fabe56eb9e1c71b117a1e661e6c3e078d9fb54d7d276c6c”:{ “名称”:“测试”, “EndpointID”:“eedf2822384a5ebc01e5a2066533f714b6045f661e24080a89d04574e654d841”, “MacAddress”:“02:42:ac:11:00:02”, “IPv4Address”:“172.17.0.2/16”, “IPv6Address”:“” } }, “选项”:{ “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” }, “标签”: {} } ]
我错过了什么?
答案 0 :(得分:3)
对我来说这很好用!
我已经安装了图像 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
Go to management http://192.168.99.100:15672
对于 Spring Boot ,您可以配置它或适用于其他连接
spring.rabbitmq.host=192.168.99.100
spring.rabbitmq.username=admin
spring.rabbitmq.password=admin2017
spring.rabbitmq.port=5672
祝福
答案 1 :(得分:3)
对于寻找此错误的其他人,我在docker容器中使用spring boot和rabbitmq,并以docker compose开头。我一直从春季应用中获得org.springframework.amqp.AmqpConnectException: java.net.ConnectException: Connection refused
。
rabbitmq主机名不正确。为了解决这个问题,我在spring应用程序配置中使用了容器名称。可以将spring.rabbitmq.host=my-rabbit
放入spring的application.properties
(或yml
文件)中,或者在docker-compose.yaml
中将environment: SPRING_RABBITMQ_HOST: my-rabbit
添加到spring服务中。当然,“ my-rabbit”是docker-compose.yaml
答案 2 :(得分:0)
重新启动后,一切正常。我不认为Rabbit正在使用尊重.config更改
答案 3 :(得分:0)
我正在使用带有 rabbitmq:3-management 的 docker 和 linux 容器,并创建了一个基于 dotnet 核心的 web api。从 We API 操作方法调用时,我遇到了同样的问题并将值更改为“host.docker.internal”
<块引用>以下场景对我有用
“消息”:{ "主机名": "host.docker.internal", "订单队列": "产品队列", "用户名": "someuser", "密码": "somepassword" },
但在通过 docker build 命令创建容器时面临同样的问题,但在使用 Visual Studio F5 命令创建容器时则不然。
现在找到解决方案有两种方法:
默认情况下,所有容器都通过这些步骤添加到“桥接”网络中
案例 1: 如果您在 docker 中已经有容器(rabbitmq 和 api) 然后运行然后首先检查他们的ip/主机名
<块引用>案例 2: 如果您没有正在运行的容器,那么您可能想要创建 您在 docker 中的网络然后按照以下步骤操作:
<块引用>通过这些步骤,您可以将容器放入新创建的同一网络中,它们可以进行通信。
注意:默认情况下会创建“桥接”网络类型