Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

316
Vistas
Java RMI en la ventana acoplable

He estado tratando de hacer que una aplicación Java RMI funcione en docker como prueba desde hace algún tiempo.

La aplicación funciona cuando ambos componentes están en la misma PC, cuando el "servidor" está en docker no.

¿Cómo puedo ejecutar un método remoto que he dockerizado?

Hay un fragmento de mi cliente:

 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();

Y mi "servidor":

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

También uso System.out.println(Inet4Address.getLocalHost().getHostAddress()); para obtener la dirección IP de ambos componentes, son iguales cuando se ejecutan localmente pero diferentes cuando el servidor está en la ventana acoplable como se esperaba.

Mi cliente puede "leer" el código auxiliar registrado del contenedor acoplable, por lo que si le cambio el nombre a RegisteredStub2 , entonces

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

imprime RegisteredStub2 para que, de alguna manera, mi cliente pueda ver el registro en Docker pero no pueda acceder al método remoto.

El cliente falla con: java.net.ConnectException: Conexión agotada: connect java.rmi.ConnectException: Conexión rechazada para hospedar: DOCKER IP;

cuando llamo al método remoto int response = stub.CommonMethod(); desde el cliente de escritorio.

Aquí están mis comandos de archivos acoplables:

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

¡Gracias!

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Puede que sea demasiado tarde para ser útil, pero recientemente construí un proyecto experto de varios módulos para una tarea universitaria y lo dockericé.

Tu docker-compose.yml debería verse así:

 version: '3' services: server: build: server client: build: client environment: SERVER_HOST: server depends_on: - server

Sus servidores Dockerfile algo como esto:

 FROM openjdk:8-jre-alpine COPY target/server-jar-with-dependencies.jar /server.jar CMD /usr/bin/java -jar /server.jar

Y sus clientes Dockerfile algo como esto:

 FROM openjdk:8-jre-alpine ENV SERVER_HOST=localhost COPY target/client-jar-with-dependencies.jar /client.jar CMD /usr/bin/java -jar /client.jar $SERVER_HOST

Tenga en cuenta la variable $SERVER_HOST pasada al cliente, esto le permitirá hacer lo siguiente en el código del cliente:

 Registry registry = LocateRegistry.getRegistry(args[0]);
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda