【问题标题】:Docker image for Spring/RabbitMQ tutorial results in connection refusedSpring/RabbitMQ 教程的 Docker 映像导致连接被拒绝
【发布时间】:2017-06-28 13:33:23
【问题描述】:

我正在学习这里的 Spring 教程;

Messaging with RabbitMQ

我发现了这个问题,但它没有解决我对教程中找到的docker-compose.yml 文件的查询;

Spring RabbitMQ tutorial results in Connection Refused error

在应用程序实际运行之前,我已完成所有必要步骤,此时我收到 ConnectException 异常,表明服务器未运行或未正确运行。

教程中指定的docker-compose.yml文件如下;

rabbitmq:
image: rabbitmq:management
ports:
  - "5672:5672"
  - "15672:15672"

基本上我不确定这个 docker-compose 文件实际上做了什么,因为它似乎没有按照教程建议的那样设置 RabbitMQ 服务器(或者至少不是按照教程所期望的方式)。我对 Docker 也很陌生,所以我可能错误地认为这个文件会运行 RabbitMQ 服务器的新实例。

当我运行 docker-compose up 时,我得到以下控制台输出;

rabbitmq_1  |
rabbitmq_1  | =INFO REPORT==== 28-Jun-2017::13:27:26 ===
rabbitmq_1  | Starting RabbitMQ 3.6.10 on Erlang 20.0-rc2
rabbitmq_1  | Copyright (C) 2007-2017 Pivotal Software, Inc.
rabbitmq_1  | Licensed under the MPL.  See http://www.rabbitmq.com/
rabbitmq_1  |
rabbitmq_1  |               RabbitMQ 3.6.10. Copyright (C) 2007-2017            Pivotal Software, Inc.
rabbitmq_1  |   ##  ##      Licensed under the MPL.  See  http://www.rabbitmq.com/
rabbitmq_1  |   ##  ##
rabbitmq_1  |   ##########  Logs: tty
rabbitmq_1  |   ######  ##        tty
rabbitmq_1  |   ##########
rabbitmq_1  |               Starting broker...
rabbitmq_1  |
rabbitmq_1  | =INFO REPORT==== 28-Jun-2017::13:27:26 ===
rabbitmq_1  | node           : rabbit@bd20dc3d3d2a
rabbitmq_1  | home dir       : /var/lib/rabbitmq
rabbitmq_1  | config file(s) : /etc/rabbitmq/rabbitmq.config
rabbitmq_1  | cookie hash    : DTVsmjdKvD5KtH0o/OLVJA==
rabbitmq_1  | log            : tty
rabbitmq_1  | sasl log       : tty
rabbitmq_1  | database dir   : /var/lib/rabbitmq/mnesia/rabbit@bd20dc3d3d2a

...加上大量的 INFO 报告。这让我相信 RabbitMQ 服务器已启动并正在运行,但显然不是因为我无法连接。

我让它工作的唯一方法是手动安装 Erlang 和 RabbitMQ(在这里是在 Windows 系统上),这似乎让我完成了教程。

为什么在本教程中甚至提到了 Docker? docker-compose.yml 似乎没有按照教程的建议进行操作。

这个文件在这里实际上做了什么?为了本教程的目的,如何在 docker 容器中运行 RabbitMQ?这是端口号的问题吗?

【问题讨论】:

  • Windows (imo) 略微支持 Docker。 docker是启动虚拟机,还是使用hyper-v?
  • @Eich,这台机器是公司所有的,我们被告知要使用 Docker Toolbox,所以我相信它使用的是 VirtualBox,而不是完整的 Windows Docker 安装的 Hyper-V。

标签: spring-boot rabbitmq docker-compose


【解决方案1】:

原来问题出在 Spring RabbitMQ 模板连接信息上。

Spring 教程假定使用 RabbitMQ(加上 Erlang)的正常手动安装,并且 RabbitMQ Spring 模板使用了一些与教程中指定的docker-compose 文件中的图像不兼容的默认连接参数。

为了解决这个问题,我需要添加一个 Spring application.properties 文件并将其添加到我的应用程序目录结构中的 resources 文件夹中。接下来我需要使用以下命令找到我的 Docker 容器的 IP 地址;

docker-machine ip

这将给出IP地址。我在application.properties文件中添加了以下参数;

spring.rabbitmq.host={docker-machine ip address}
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

这里的端口、用户名和密码都是默认的,可以在RabbitMQ文档中找到。

这样做我能够让我的应用程序正确连接到在 Docker 容器中运行的 RabbitMQ 服务器。

Spring 教程似乎有些不完整,因为它没有告知读者在使用 RabbitMQ docker-compose 文件时需要一些额外的步骤,而不是教程其余部分假定的手动安装 RabbitMQ。

【讨论】:

    【解决方案2】:

    据我所知,不可能一直知道 IP 地址,您应该提供 DNS,而不是 IP 地址,它是您的 docker-compose 文件中定义的 rabbitmq 服务器的名称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-12
      • 2022-09-25
      • 2020-01-19
      • 2019-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多