Rabbitmq从Docker容器到本地主机的连接被拒绝

Can*_*ode 7 rabbitmq docker

我有一个运行Java进程的Docker容器,该容器试图连接到在本地主机上运行的Rabbitmq。

这是我到目前为止已完成的步骤:

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

  1. 我已经更新了rabbitmq_env.conf文件,删除了RABBITMQ_NODE_IP_ADDRESS,所以我不依赖于通过本地主机进行连接,并且我拥有管理员rabbitmq用户。(不尝试使用来宾用户)
  2. 我通过本地计算机上的telnet进行了测试,没有任何问题 telnet <local-ip> 5672

在我的Docker容器中

  1. 能够ping本地IP并卷曲Rabbitmq管理api curl -i -u username:password http://local-ip:15672/api/vhosts成功返回

    [{“ name”:“ /”,“ tracing”:false}]

  2. 当我尝试从容器内进行telnet时

    “外部主机关闭连接”

  3. 看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“:{}}]

我想念什么?

Har*_*llo 7

对我来说,这很好!

我已经安装了镜像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)

最好的祝愿


GGr*_*rec 6

对于其他搜索此错误的人,我在 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


Can*_*ode 0

重新启动后,一切正常。我不认为 Rabbit 正在使用尊重 .config 更改