我目前正在开发一个将Docker和Spring程序与RMI服务相关联的项目,我无法找到解决问题的方法。
我正在尝试通过docker-compose.yml
文件将两个Spring程序部署到两个不同的容器中。第一个在地址0.0.0.0
(所有内容)和特定端口(在Docker文件中也是EXPOSE)中公开了一个RMI接口。第二个是使用远程接口的RMI客户端。
要访问从另一个公开RMI服务的容器,我通过Compose文件中的links
参数给它一个别名,如下所示:
services:
rmi-service:
...
rmi-client:
...
links:
- rmi-service:rmihost
当我使用docker-compose up -d
启动容器时,如果我从第二个容器执行命令ping rmihost
,则效果很好。但是当我尝试启动Spring RMI客户端时,出现以下错误:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'my.rmi.client' defined in class path resource [META-INF/rmi-client-spring.xml]: Invocation of init method failed; nested exception is
org.springframework.remoting.RemoteConnectFailureException: Could not connect to remote service [rmi://rmihost:11199/businessService]; nested exception is
java.rmi.ConnectException: Connection refused to host: 0.0.0.0
我无法弄清楚为什么它不会将主机名转换为正确的IP地址,而我能够ping
它。我尝试在rmihost
文件中添加/etc/hosts
,但它不会改变任何内容,它总是会出现相同的错误。
对此问题的任何帮助或建议将不胜感激!提前谢谢!
编辑以下是我的docker-compose.yml
文件:
version: '2.1'
services:
rmi-service:
restart: always
tty: true
build: ./rmi-service/
image: rmi-service
container_name: rmi-service
expose:
- "11199"
rmi-client:
restart: always
tty: true
build: ./rmi-client/
image: rmi-client
container_name: rmi-client
depends_on:
- rmi-service
links:
- rmi-service:rmihost