简体   繁体   English

无法与 docker 容器内的 Apache Camel 中的 MQTT 代理连接

[英]Unable to connect with MQTT broker in Apache Camel inside docker container

I have a project with Apache camel, and it requires mqtt broker for connection.我有一个使用 Apache camel 的项目,它需要 mqtt 代理进行连接。 If I run mqtt broker (mosquitto) in docker and execute my project locally it is working totally fine but when I am running the project through Dockerfile ie making an executable jar and executing it on docker it says "Unable to connect to server (32103) - java.net.ConnectException: Connection refused (Connection refused)" even though mqtt broker is up and running.如果我在 docker 中运行 mqtt broker (mosquitto) 并在本地执行我的项目,它工作得很好,但是当我通过 Dockerfile 运行项目时,即制作一个可执行 jar 并在 docker 上执行它时,它说“无法连接到服务器 (32103) - java.net.ConnectException:连接被拒绝(连接被拒绝)” ,即使 mqtt 代理已启动并正在运行。

Full logs (exception):完整日志(例外):

    [main] ERROR org.apache.camel.impl.engine.AbstractCamelContext - Error starting CamelContext (camel-1) due to exception thrown: Unable to connect to server (32103) - java.net.ConnectException: Connection refused (Connection refused)
org.apache.camel.RuntimeCamelException: Unable to connect to server (32103) - java.net.ConnectException: Connection refused (Connection refused)
at org.apache.camel.RuntimeCamelException.wrapRuntimeException(RuntimeCamelException.java:66)
at org.apache.camel.support.service.BaseService.doFail(BaseService.java:413)
at org.apache.camel.support.service.BaseService.fail(BaseService.java:342)
at org.apache.camel.support.service.BaseService.start(BaseService.java:132)
at org.apache.camel.support.service.ServiceHelper.startService(ServiceHelper.java:113)
at org.apache.camel.impl.engine.AbstractCamelContext.startService(AbstractCamelContext.java:3597)
at org.apache.camel.impl.engine.InternalRouteStartupManager.doStartOrResumeRouteConsumers(InternalRouteStartupManager.java:401)
at org.apache.camel.impl.engine.InternalRouteStartupManager.doStartRouteConsumers(InternalRouteStartupManager.java:319)
at org.apache.camel.impl.engine.InternalRouteStartupManager.safelyStartRouteServices(InternalRouteStartupManager.java:213)
at org.apache.camel.impl.engine.InternalRouteStartupManager.doStartOrResumeRoutes(InternalRouteStartupManager.java:147)
at org.apache.camel.impl.engine.AbstractCamelContext.doStartCamel(AbstractCamelContext.java:3299)
at org.apache.camel.impl.engine.AbstractCamelContext.doStartContext(AbstractCamelContext.java:2951)
at org.apache.camel.impl.engine.AbstractCamelContext.doStart(AbstractCamelContext.java:2902)
at org.apache.camel.support.service.BaseService.start(BaseService.java:119)
at org.apache.camel.impl.engine.AbstractCamelContext.start(AbstractCamelContext.java:2586)
at org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:247)
at basyx.components.databridge.core.component.UpdaterComponent.startRoutes(UpdaterComponent.java:68)
at basyx.components.databridge.core.component.UpdaterComponent.startComponent(UpdaterComponent.java:62)
at basyx.components.databridge.executable.UpdaterExecutable.main(UpdaterExecutable.java:73)
Caused by: Unable to connect to server (32103) - java.net.ConnectException: Connection refused (Connection refused)
 at org.eclipse.paho.client.mqttv3.internal.TCPNetworkModule.start(TCPNetworkModule.java:80)
 at org.eclipse.paho.client.mqttv3.internal.ClientComms$ConnectBG.run(ClientComms.java:724)
 at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.net.ConnectException: Connection refused (Connection refused)
 at java.base/java.net.PlainSocketImpl.socketConnect(Native Method)
 at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:412)
 at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:255)
 at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:237)
 at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
 at java.base/java.net.Socket.connect(Socket.java:609)
 at org.eclipse.paho.client.mqttv3.internal.TCPNetworkModule.start(TCPNetworkModule.java:74)
 ... 2 more
[main] INFO org.apache.camel.impl.engine.AbstractCamelContext - Apache Camel 3.14.0 (camel-1) shutting down (timeout:45s)
[main] INFO org.apache.camel.impl.engine.AbstractCamelContext - Routes stopped (total:2 stopped:2)
[main] INFO org.apache.camel.impl.engine.AbstractCamelContext -     Stopped route2 (paho://PropertyB)
[main] INFO org.apache.camel.impl.engine.AbstractCamelContext -     Stopped route1 (paho://Properties)
[main] INFO org.apache.camel.impl.engine.AbstractCamelContext - Apache Camel 3.14.0 (camel-1) shutdown in 14ms (uptime:238ms)
org.apache.camel.RuntimeCamelException: Unable to connect to server (32103) - java.net.ConnectException: Connection refused (Connection refused)
 at org.apache.camel.RuntimeCamelException.wrapRuntimeException(RuntimeCamelException.java:66)
 at org.apache.camel.support.service.BaseService.doFail(BaseService.java:413)
 at org.apache.camel.support.service.BaseService.fail(BaseService.java:342)
 at org.apache.camel.support.service.BaseService.start(BaseService.java:132)
 at org.apache.camel.support.service.ServiceHelper.startService(ServiceHelper.java:113)
 at org.apache.camel.impl.engine.AbstractCamelContext.startService(AbstractCamelContext.java:3597)
 at org.apache.camel.impl.engine.InternalRouteStartupManager.doStartOrResumeRouteConsumers(InternalRouteStartupManager.java:401)
 at org.apache.camel.impl.engine.InternalRouteStartupManager.doStartRouteConsumers(InternalRouteStartupManager.java:319)
 at org.apache.camel.impl.engine.InternalRouteStartupManager.safelyStartRouteServices(InternalRouteStartupManager.java:213)
 at org.apache.camel.impl.engine.InternalRouteStartupManager.doStartOrResumeRoutes(InternalRouteStartupManager.java:147)
 at org.apache.camel.impl.engine.AbstractCamelContext.doStartCamel(AbstractCamelContext.java:3299)
 at org.apache.camel.impl.engine.AbstractCamelContext.doStartContext(AbstractCamelContext.java:2951)
 at org.apache.camel.impl.engine.AbstractCamelContext.doStart(AbstractCamelContext.java:2902)
 at org.apache.camel.support.service.BaseService.start(BaseService.java:119)
 at org.apache.camel.impl.engine.AbstractCamelContext.start(AbstractCamelContext.java:2586)
 at org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:247)
 at basyx.components.databridge.core.component.UpdaterComponent.startRoutes(UpdaterComponent.java:68)
 at basyx.components.databridge.core.component.UpdaterComponent.startComponent(UpdaterComponent.java:62)
 at basyx.components.databridge.executable.UpdaterExecutable.main(UpdaterExecutable.java:73)
Caused by: Unable to connect to server (32103) - java.net.ConnectException: Connection refused (Connection refused)
 at org.eclipse.paho.client.mqttv3.internal.TCPNetworkModule.start(TCPNetworkModule.java:80)
 at org.eclipse.paho.client.mqttv3.internal.ClientComms$ConnectBG.run(ClientComms.java:724)
 at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.net.ConnectException: Connection refused (Connection refused)
 at java.base/java.net.PlainSocketImpl.socketConnect(Native Method)
 at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:412)
 at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:255)
 at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:237)
 at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
 at java.base/java.net.Socket.connect(Socket.java:609)
 at org.eclipse.paho.client.mqttv3.internal.TCPNetworkModule.start(TCPNetworkModule.java:74)
 ... 2 more

My docker compose file:我的码头工人撰写文件:

version: '3.8'
services:

  bridge-service:
    image: ${IMAGE_NAME}:${IMAGE_TAG}
    container_name: ${CONTAINER_NAME}
    volumes:
      - C:\Users\user\temp:/usr/share/config
    depends_on:
      mqtt:
        condition: service_healthy

  mqtt:
    image: eclipse-mosquitto:2.0.15
    ports:
      - 1884:1884
    volumes:
      - C:\Users\user\temp\mosquitto:/mosquitto/config
    healthcheck:
      test: ["CMD-SHELL", mosquitto_sub -p 1884 -t 'topic' -C 1 -E -i probe -W 3]
      interval: 10s
      retries: 2
      start_period: 10s
      timeout: 5s

I am sure that this is due to docker because even if I am running jar file locally it is working fine.我确信这是由于 docker 造成的,因为即使我在本地运行 jar 文件,它也能正常工作。

Please help if anyone has any clue.如果有人有任何线索,请提供帮助。

After searching over internet, I added network_mode: host to service bridge-service and everything worked fine.通过互联网搜索后,我将network_mode: host添加到 bridge-service 服务,一切正常。

So in order to communicate between two services like explained scenario in the problem above just add network_mode: host and everything would work.因此,为了像上面问题中解释的场景那样在两个服务之间进行通信,只需添加network_mode: host ,一切都会正常进行。

Now the updated docker compose file is:现在更新的 docker compose 文件是:

version: '3.8'
services:

  bridge-service:
    image: ${IMAGE_NAME}:${IMAGE_TAG}
    container_name: ${CONTAINER_NAME}
    network_mode: host
    volumes:
      - C:\Users\user\temp:/usr/share/config
    depends_on:
      mqtt:
        condition: service_healthy

  mqtt:
    image: eclipse-mosquitto:2.0.15
    ports:
      - 1884:1884
    volumes:
      - C:\Users\user\temp\mosquitto:/mosquitto/config
    healthcheck:
      test: ["CMD-SHELL", mosquitto_sub -p 1884 -t 'topic' -C 1 -E -i probe -W 3]
      interval: 10s
      retries: 2
      start_period: 10s
      timeout: 5s

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何从主机外部(同一网络)连接到在 docker 容器内运行的 activemq 代理 [Windows] - How to connect to an activemq broker which is running inside a docker container from outside the host (same network) [Windows] 盆景kafka无法从apache骆驼连接 - bonsai kafka unable to connect from apache camel Docker 容器内的 Apache POI - Apache POI inside Docker container 使用Apache Camel在Docker容器中调用服务时响应时间长 - Long response time when calling a service in a Docker container with Apache Camel 无法使用Eclipse Paho客户端连接到MQTT代理 - Cannot connect to MQTT broker with Eclipse Paho client 无法通过 ssl 连接到 mqtt 代理 - can't connect to mqtt broker via ssl 无法从另一个docker容器连接到docker容器中的mysql - Unable to connect to mysql in docker container from another docker container 使用Apache Camel蓝图-需要将属性持久保存在容器中并且独立 - Using Apache Camel Blueprint - need to persist properties inside container and standalone Tomcat 9 无法在 docker 容器中找到 org.apache.ibatis 和 Z93F725A07423D21F439 - Tomcat 9 unable find org.apache.ibatis inside docker container with java 17 无法使用 Java 中的 HttpURLConnection 连接 Docker 容器 - Unable to connect Docker Container using HttpURLConnection in Java
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM