我有一个运行Java进程的Docker容器,该容器试图连接到在本地主机上运行的Rabbitmq。
这是我到目前为止已完成的步骤:
在我的本地机器上(运行Docker版本1.13.0-rc3的MacBook,在关闭防火墙的情况下构建4d92237)
telnet <local-ip> 5672在我的Docker容器中
能够ping本地IP并卷曲Rabbitmq管理api
curl -i -u username:password http://local-ip:15672/api/vhosts成功返回
[{“ name”:“ /”,“ tracing”:false}]
当我尝试从容器内进行telnet时
“外部主机关闭连接”
看rabbitmq.logs
=错误报告====正在关闭AMQP连接<0.30526.1>(本地IP:53349->本地IP:5672):{handshake_timeout,handshake}
我的java stacktrace以防万一
由以下原因引起:java.net.ConnectException:>> java.net处java.net.PlainSocketImpl.socketConnect(本机方法)处的连接被拒绝(Connection> refused)。 > 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 (com.rabbitmq.client.impl.FrameHandlerFactory.create(FrameHandlerFactory.ja> va:32)处的(Socket.java:589)> com.rabbitmq.client.impl.recovery.RecoveryAwareAMQConnectionFactory.newCon> nection(RecoveryAwareAMQConnectionFactory.java :35)
docker network inspect bridge
[{“名称”:“ bridge”,“ Id”:“ 716f935f19a107225650a95d06eb83d4c973b7943b1924815034d469164affe5”,“已创建”:“ 2016-12-11T15:34:41.950148125Z”,“范围”:“本地”,“驱动程序”:“桥梁” ,“ EnableIPv6”:否,“ IPAM”:{“ Driver”:“默认”,“ Options”:空,“ Config”:[{“ Subnet”:“ 172.17.0.0/16”,“ Gateway”:“ 172.17 .0.1“}]},”内部“:false,”可连接“:false,”容器“:{“ 9722a49c4e99ca5a7fabe56eb9e1c71b117a1e661e6c3e078d9fb54d7d276c6c”:{“ Name”:“ testing”,“ EndpointID”:“ eedf2822384a5ebc01e5a2066533f714b6045f661e240:1”:“ 1:661” “,” 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“:{}}]
我想念什么?
对我来说,这很好!
我已经安装了镜像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
Run Code Online (Sandbox Code Playgroud)
最重要的是添加连接和管理端口-p 5672:5672 -p 15672:15672
看到您在Docker中托管
docker-machine ip
Run Code Online (Sandbox Code Playgroud)
返回我的情况:
192.168.99.100
Run Code Online (Sandbox Code Playgroud)
转到管理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
Run Code Online (Sandbox Code Playgroud)
最好的祝愿
对于其他搜索此错误的人,我在 docker 容器中使用 spring boot 和 rabbitmq,并使用 docker compose 启动它们。我一直在org.springframework.amqp.AmqpConnectException: java.net.ConnectException: Connection refused使用 spring 应用程序。
rabbitmq 主机名不正确。为了解决这个问题,我在 spring 应用程序配置中使用了容器名称。要么放入spring.rabbitmq.host=my-rabbitspring 的application.properties(或yml文件)中,要么docker-compose.yaml添加environment: SPRING_RABBITMQ_HOST: my-rabbit到 spring 服务中。当然,“my-rabbit”是描述的rabbitmq容器名docker-compose.yaml