从我的spring-boot应用程序容器连接到Rabbitmq时,我遇到了一个错误。
我在docker compose文件中附加了两个docker容器(Rabbitmq和spring-boot应用程序)和网桥网络:
version: '3.3'
services:
rabbitmq:
image: rabbitmq:3.8-management-alpine
container_name: rabbitmq
ports:
- 5673:5673
- 5672:5672
- 15672:15672
networks:
- orchestrator-rabbitmq
environment:
- RABBITMQ_DEFAULT_USER=adminsi
- RABBITMQ_DEFAULT_PASS=test
orchestrator:
restart: on-failure
build:
context: .
dockerfile: Dockerfile-orchestrator
args:
VERSION: ${VERSION}
environment:
- spring_rabbitmq_host=rabbitmq
- spring_rabbitmq_port=5672
- spring_rabbitmq_username=adminsi
- spring_rabbitmq_password=test
container_name: orchestrator
depends_on:
- rabbitmq
networks:
- orchestrator-rabbitmq
ports:
- 7127:7127
networks:
orchestrator-rabbitmq:
external:
name: orchestrator-rabbitmq
当我的Spring Boot应用程序尝试连接到后者时,Rabbitmq拒绝了连接。日志下方:
当我在我的spring boot应用程序容器(在我的例子中是orchestrator)中执行下面的命令时,我得到以下响应:
nc -vz rabbitmq 5672
回应是:
连接到 rabbitmq (172.19.0.2) 5672 端口 [tcp/*] 成功!
所以tcp连接在两个容器之间成功了,但是当我使用上面docker撰写文件中定义的凭据在我的orchestrator容器中curl到Rabbitmq时,我得到了连接被拒绝:
curl -u "adminsi:test" http://localhost:15672
但是,当我改变localhost与Rabbitmq作为主机如下:
curl -u "adminsi:test" http://rabbitmq:15672
响应成功!
在我的Spring启动应用程序(orchestrator)中的属性配置下方:
spring.rabbitmq.host=rabbitmq
spring.rabbitmq.port=5672
spring.rabbitmq.username=adminsi
spring.rabbitmq.password=test
我正在使用apache camel在rabbitmq中发布消息(下面是一个从API读取并在rabbatmq主题中发布响应的camel路由示例):
from("direct:OrchestratorDtstoreLoadDataRoute")
.routeId("orchestrator-dtstore-route")
.log(LoggingLevel.INFO, "Reading dtstore projects")
.removeHeaders("*")
.setHeader("Content-Type", () -> "application/json")
.setHeader("CamelHttpMethod", () -> "GET")
.setHeader("Authorization", () -> dtstoreToken)
.setHeader("x-apikey", () -> dtstoreXapiKey)
.recipientList(simple("cxfrs:{{cmdb.service.out.dtstore.url}}/projects"))
.log(LoggingLevel.DEBUG, "dtstore projects : ${body}")
.to(ExchangePattern.InOnly, "rabbitmq:q.cmdb.dtstore.projects?routingKey=dtstore&autoDelete=false&exchangeType=topic")
.end();
Orchestrator Dockerfile:
FROM openjdk:17.0.2-jdk-slim
ARG VERSION
ENV ORCHESTRATOR_VERSION=$VERSION
RUN apt-get update && apt-get install -y \
nano \
netcat \
iputils-ping \
curl \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /opt/app
COPY target/orchestrator-$ORCHESTRATOR_VERSION.jar .
EXPOSE 7127
ENTRYPOINT java -jar orchestrator-$ORCHESTRATOR_VERSION.jar
我在运行 docker 撰写文件之前运行 mvn 干净的包。
谢谢你的帮助。
在旅程结束时,我找到了解决方案,是的,在将Spring属性修改为以下新属性后:
camel.component.rabbitmq.hostname=localhost
camel.component.rabbitmq.port=5672
camel.component.rabbitmq.username=adminsi
camel.component.rabbitmq.password=test
这样,在rabbitmq知道这些属性之前,我们可以告诉绑定到rabbitmq的camel有关主机、端口、用户名和密码的信息,因此,camel无法解析rabbitmq的主机。
然后,我更改了orchestrator容器的docker-compose环境:
version: '3.3'
services:
rabbitmq:
image: rabbitmq:3.8-management
container_name: rabbitmq
ports:
- 5673:5673
- 5672:5672
- 15672:15672
networks:
- orchestrator-rabbitmq
environment:
- RABBITMQ_DEFAULT_USER=adminsi
- RABBITMQ_DEFAULT_PASS=test
orchestrator:
restart: on-failure
build:
context: .
dockerfile: Dockerfile
args:
VERSION: ${VERSION}
environment:
- camel_component_rabbitmq_hostname=rabbitmq
- camel_component_rabbitmq_port=5672
- camel_component_rabbitmq_username=adminsi
- camel_component_rabbitmq_password=test
container_name: orchestrator
depends_on:
- rabbitmq
networks:
- orchestrator-rabbitmq
ports:
- 7127:7127
networks:
orchestrator-rabbitmq:
external:
name: orchestrator-rabbitmq
我已经将rabbitmq的主机属性(camel_component_rabbitmq_hostname)修改为rabbitq,以便进行容器解析。
我希望我的解决方案适用于您,享受!
我花了几个小时在谷歌上搜索,但似乎找不到正确的路径/文档来帮助我走上正确的道路:( 前提很简单。 我有一个在localhost:8080上打开的springboot应用程序。我有一个在localhost:15672上打开的rabbitmq服务器 当这两个应用程序都运行时,springboot应用程序将通过一些用户交互向Rabbitmq服务器发送消息。当我对这两个独立的服务进行dockerize(容
我有一个运行java进程的docker容器,我试图将该进程连接到本地主机上运行的rabbitmq。 以下是我到目前为止所做的步骤: null 能够ping local-ip和curl rabbitmq admin api [{“名称”:“/”,“跟踪”:false}] 当我试图从容器内部telnet时,我得到 由:java.net.ConnectException:在java.net.plains
当试图用docker-compose将我的express应用程序连接到mongo容器时,连接被拒绝。我可以使用localhost:27017和使用dbsetup.js的L/P设置连接到robo3T的db容器,但是当express试图连接时,我得到了一个错误:
喂,伙计们! 这是我的第一次,所以我会尽力做到最好。 我想创建一个应用程序,它是运行与Springboot框架,我想把它连接到一个docker容器嵌入MySQL(但Spring启动应用程序不是运行在docker) 所以我一直关注这个帖子 我已经做了我的docker-comact: 我用这个命令运行它: 一切都很好,所以现在我在Spring靴上改变application.properties: 但当
我有一个Java应用程序在Docker容器中运行,在另一个容器中运行。 如何连接容器以在Java应用程序中使用<code>rabbitmq</code>?
我正在运行2个spring boot应用程序:一个客户端和rest-api。客户机与rest-api通信,rest-API与mongodb数据库通信。所有3层都在docker容器中运行。 我启动容器,通常指定docker文件中公开的端口,并将它们映射到主机上的端口,例如:-p 7070:7070,其中7070是docker文件中公开的端口。 当我通过< code > Java-jar[applic