Dockerizing springboot应用程序(在容器中)未连接到rabbitmq(在容器中):连接被拒绝

Posted

技术标签:

【中文标题】Dockerizing springboot应用程序(在容器中)未连接到rabbitmq(在容器中):连接被拒绝【英文标题】:Dockerizing springboot application(in container) not connecting to rabbitmq(in container): connection refused 【发布时间】:2021-09-21 21:41:05 【问题描述】:

我花了几个小时在谷歌上搜索,但我似乎找不到正确的途径/文档来帮助我走上正确的道路:(

前提很简单。

我有一个在 localhost:8080 上打开的 springboot 应用程序。 我有一个在 localhost:15672 上打开的 rabbitmq 服务器

springboot 应用程序在两者都运行时会通过一些用户交互向rabbitmq 服务器发送消息。 当我 dockerize(containerize?) 这两个单独的服务时出现问题 现在,当它们都被容器化时——我仍然可以分别使用 localhost:8080 和 localhost:15672 访问这两个应用程序。 但是当我的 Spring Boot 应用程序提交用户消息时,我不断收到 “连接被拒绝” 错误。

我所做的事情都无济于事(失败):

    两个容器在创建时都使用默认的“桥接”网络 - 不起作用。 尝试创建自己的用户定义网络,将两个容器都放入自定义网络 - 无效 创建了一个 docker-compose 文件
version: "3.2"
services:
  rabbitmq:
    image: rabbitmq:management
    ports:
      - "5672:5672"
      - "15672:15672"
    networks:
      - hin-net
app-container:
    image: spring/spring-boot-docker:latest
    ports:
      - 8080:8080
    environment:
      - SPRING_RABBITMQ_HOST=rabbitmq
    depends_on:
      - rabbitmq
networks:
  hin-net:
    driver: bridge

这样做的唯一一件事是自动创建两个 docker 容器,而不是我通过“docker run”创建它们 - 这也不起作用。

任何人都可以帮助我链接或提供一些关于如何让我的 springboot 应用程序查看并连接到我的 rabbitMQ 服务器的指导吗? 我看到的每一个地方,人们都说“确保他们在同一个 docker 网络中”,但这没有用。我怀疑我的 docker compose 文件缺少一些重要的配置,但我不知道下一步该去哪里。

这两个线程几乎是我的问题

    Connect to RabbitMQ in docker-container from another container Connect java application in docker container to rabbitmq

但他们已经死了,并且从未找到解决方案。

【问题讨论】:

在 Compose 设置中,尝试删除所有 networks: 块,并按照您的方式配置 SPRING_RABBITMQ_HOST=rabbitmq(应与 Compose rabbitmq 服务名称匹配)。另请参阅 Docker 文档中的 Networking in Compose。 (与网络设置无关,特别是对于RabbitMQ,你可能需要设置hostname: rabbitmq或类似的东西,否则它会在重启时忘记它的状态。默认主机名(8)是容器ID,但 RabbitMQ 期望它在重新启动时保持不变。) 谢谢@DavidMaze 我会仔细阅读您链接的文档,看看它是否包含我正在寻找的真相 【参考方案1】:

Welp 找到了答案。希望以后有同样问题的任何人都能看到这篇文章并能够继续他们的项目!

这不是码头工人的问题,明确地.. 您的应用程序的主机名需要是运行 rabbitmq 的容器名。 所以在 springboot 中你的 application.properties 文件中,你可能将主机名设置为“localhost”,将其更改为你的容器名称,rabbit 将建立连接。

我读到这是一个 rabbitmq 依赖项。太弱了,太弱了。

希望这对任何人都有帮助

第二参考:Rabbitmq connection refused from Docker container to local host (第二个答案是正确的)

【讨论】:

以上是关于Dockerizing springboot应用程序(在容器中)未连接到rabbitmq(在容器中):连接被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

dockerizing Spring Boot 应用程序错误:错误:无效或损坏的 jarfile /app.jar

在 dockerizing nestjs 应用程序时出错

Dockerizing React App:应用程序在容器内启动,但无法从暴露的端口访问

在单存储库中使用 Lerna 对多个 Node 应用程序进行 Dockerizing

Dockerizing 一个 NodeJS 应用程序:package.json 在本地可以正常工作,但不能在容器内工作

为 Gitlab CI Dockerizing Nodejs 依赖项