Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

323
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda