You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 21:52:31