Docker部署Java服务后RMI远程调用故障排查求助
问题:Docker容器内Java RMI服务无法与宿主机GUI客户端通信
我正在将一个Java服务器应用容器化,目前遇到了RMI通信的异常问题,具体情况如下:
已正常运行的场景
- 模拟器运行在宿主机上,通过TCP协议的10008-10009端口与Docker容器内的服务器应用通信,该场景完全正常,仅需暴露对应端口即可。
异常场景:GUI客户端的RMI通信
- 图形界面(GUI)同样运行在宿主机上,需通过40031端口以RMI(远程方法调用)与容器内服务通信,但此场景始终无法正常工作。
- 我已在Dockerfile中暴露40031端口,运行容器时执行了端口映射命令:
docker run -p 40031:40031 -it 24d52b42ff77 /bin/bash - 容器内启动应用的命令如下:
java -Xms64M -Xmx256M -XX:NewRatio=3 -Djava.rmi.server.hostname=x.x.x.x $timeZoneParameter $cacertParameter -Dlogs.dir=$LOGS_DIR -cp $CLASS_PATH Application > /dev/null 2> /dev/null - 服务器启动后已在40031端口正确配置RMI,且已确认客户端与服务端的TCP连接能正常建立。需要说明的是,非Docker环境下所有功能均运行正常。
已尝试的无效方案
我查阅了不少相关资料,但大多是针对JMX监控应用的内容,与我的场景不匹配。这类方案通过添加启动参数解决问题,但对我的情况无效,示例参数如下:
JMX_PORT = 9010 HOST = "0.0.0.0" java \ -Dsun.management.jmxremote.level = FINEST \ -Dsun.management.jmxremote.handlers = java.util.logging.ConsoleHandler \ -Djava.util.logging.ConsoleHandler.level = FINEST \ -Dcom.sun.management.jmxremote.local.only = false \ -Dcom.sun.management.jmxremote.ssl = false \ -Dcom.sun.management.jmxremote.authenticate = false \ -Dcom.sun.management.jmxremote.port = $JMX_PORT \ -Dcom.sun.management.jmxremote.rmi.port = $JMX_PORT \ -Dcom.sun.management.jmxremote.host = $HOST \ -Djava.rmi.server.hostname = $HOST \ -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 \ -jar /opt/app/app.jar
想请教各位,有没有解决这个RMI通信问题的思路?
内容的提问来源于stack exchange,提问作者Raul Maza
相关产品推荐
相关产品推荐

