docker中的java rmi

li9yvcax  于 2021-07-03  发布在  Java
关注(0)|答案(0)|浏览(260)

一段时间以来,我一直在尝试让一个javarmi应用程序在docker中作为测试使用。
当两个组件都在同一台pc上时,当“服务器”不在docker中时,应用程序工作。
如何执行已停靠的远程方法?
我的客户有一个片段:

Registry registry = LocateRegistry.getRegistry(DOCKER_EXPOSED_PORT);

     // this prints any found registry names
     String[] s = registry.list();
     System.out.println(s[0]);

     CommonInterface stub = (CommonInterface) registry.lookup("RegisteredStub");
     int response = stub.CommonMethod();

以及我的“服务器”:

CommonInterface stub = (CommonInterface) UnicastRemoteObject.exportObject(obj, 2000);

  LocateRegistry.createRegistry(2000);
  Registry registry = LocateRegistry.getRegistry(2000);
  registry.bind("RegisteredStub", stub);

我也使用 System.out.println(Inet4Address.getLocalHost().getHostAddress()); 为了获得这两个组件的ip地址,它们在本地运行时是相同的,但是在docker中的服务器按预期运行时是不同的。
我的客户能够从docker容器中“读取”已注册的存根,因此如果我将其重命名为 RegisteredStub2 然后

String[] s = registry.list();
System.out.println(s[0]);

印刷品 RegisteredStub2 因此,不知何故,我的客户端可以看到docker中的注册表,但无法访问远程方法。
客户端崩溃:java.net.connectexception:连接超时:connect java.rmi.connectexception:连接拒绝主机:docker ip;
当我调用远程方法时 int response = stub.CommonMethod(); 从桌面客户端。
以下是我的docker文件命令:

EXPOSE 2000
CMD ["./rmiregistry 2000"]
CMD ["./rmid -J-Djava.security.policy=rmid.policy -port 2000"]

谢谢!

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题