如何在不同主机中的Docker容器之间设置Java RMI RMI连接

时间:2019-04-05 03:57:13

标签: java docker networking docker-compose rmi

我在主机A中有一个docker容器(名称CON1)正在运行,此容器是侦听端口1099的Java RMI服务器。我在主机B中还具有另一个运行Java RMI客户端的容器(名称CON2)。 。当我使用RMI端口1099从CON2 telnet CON1时,它工作正常:

import copy
a = [[1,1,1,1], [0,0,1,1], [1,1,0,0], [0,0,0,0]]
b = copy.deepcopy(a)

但是当我尝试通过Java RMI客户端连接时,连接被拒绝,并且错误消息显示CON1的其他IP地址。

$ telnet 172.30.34.74 1099
  Trying 172.30.34.74...
  Connected to 172.30.34.74.
  Escape character is '^]'.

尽管我使用172.30.34.74在RMI客户端代码中进行查找,但错误消息显示了其他IP地址(172.18.0.2)。当我在docker容器外运行RMI服务器和RMI客户端时,它运行良好。

该如何解决这种情况?

1 个答案:

答案 0 :(得分:0)

我实现了一个解决方案:

  1. 添加到Java命令行以启动RMI服务器自变量-Djava.rmi.server.hostname=HOST_IP。主机HOST_IP是主机IP。
  2. 将容器的network_mode设置为host。这样,容器将使用与主机相同的IP。