首页 > 解决方案 > Dockerizing springboot应用程序(在容器中)未连接到rabbitmq(在容器中):连接被拒绝

问题描述

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

前提很简单。

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

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

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

  1. 两个容器在创建时都使用默认的“桥接”网络 - 不起作用。
  2. 尝试创建我自己的用户定义网络,将两个容器都放在自定义网络中 - 没有用
  3. 创建了一个 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 文件缺少一些重要的配置,但我不知道下一步该去哪里。

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

  1. 从另一个容器连接到 docker-container 中的 RabbitMQ
  2. 将 docker 容器中的 java 应用程序连接到 rabbitmq

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

标签: spring-bootdockerdocker-composerabbitmqcontainers

解决方案


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

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

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

希望这对任何人都有帮助

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


推荐阅读