Docker部署HornetQ 2.4.0出现Connection refused连接异常求助
问题根因
- RMI服务返回地址错误:JNDI底层基于RMI实现,你当前配置的RMI绑定地址为
0.0.0.0仅代表容器内所有网卡均可监听,但RMI服务向客户端返回连接地址时,默认会返回容器内部的局域网IP或容器hostname,本地测试客户端拿到容器内部地址后无法路由,就会抛出连接拒绝错误。 - Connector返回地址错误:
hornetq-configuration.xml中配置的connector的host值为0.0.0.0,该值仅适用于服务端监听场景,客户端拿到该地址后会解析为本地地址,无法连接到Docker容器内的HornetQ服务。
解决方案
按以下步骤修改配置即可:
- 添加RMI公共地址JVM参数
修改HornetQ启动脚本bin/run.sh,在Java启动参数中追加以下配置:
-Djava.rmi.server.hostname=127.0.0.1 -Djava.rmi.server.useLocalHostname=false
如果需要非本地的其他机器访问该服务,将127.0.0.1替换为Docker宿主机的公网/局域网IP即可。
- 修改Connector配置
修改hornetq-configuration.xml中connectors节点下的所有host值,将原来的0.0.0.0替换为和上面JVM参数一致的地址(本地测试填127.0.0.1),acceptors节点的host值保持0.0.0.0不变即可:
<connectors> <connector name="netty"> <factory-class>org.hornetq.core.remoting.impl.netty.NettyConnectorFactory</factory-class> <param key="host" value="127.0.0.1"/> <param key="port" value="5445"/> </connector> <connector name="netty-throughput"> <factory-class>org.hornetq.core.remoting.impl.netty.NettyConnectorFactory</factory-class> <param key="host" value="127.0.0.1"/> <param key="port" value="5455"/> <param key="batch-delay" value="50"/> </connector> </connectors>
- 重新构建镜像启动
修改配置后重新构建Docker镜像,使用原有启动命令启动容器即可:
docker build -t hornetq . docker run -d -p 1098:1098 -p 1099:1099 -p 5445:5445 -p 5455:5455 hornetq
内容的提问来源于stack exchange,提问作者Oh hi Mark
相关产品推荐
相关产品推荐

