Проблемы с RMI при использовании Docker - PullRequest
0 голосов
/ 09 марта 2020

Я пытаюсь Dockerize Java серверное приложение, у меня есть два клиентских приложения, графический интерфейс (GUI) и эмулятор.

  1. Эмулятор выполняется на хост-компьютере и взаимодействует с серверным приложением, работающим в контейнере Docker, через два порта 10008 - 10009 через TCP protocol.

  2. Графический интерфейс работает на хост-компьютере и связывается с приложением сервера, работающим в контейнере Docker, через порт 40031 с помощью RMI (удаленный вызов метода).

Первый случай работает нормально, мне просто нужно запустить приложение, открывающее порты 10008 и 10009.

У меня проблемы со вторым случаем, я не могу заставить его работать. Я открываю порт 40031 в Dockerfile и запускаю порты отображения изображений:

docker run -p 40031:40031 -it 24d52b42ff77 /bin/bash

Затем запускаю приложение, выполняя что-то похожее на это:

java -Xms64M -Xmx256M -XX:NewRatio=3 -Djava.rmi.server.hostname=x.x.x.x $timeZoneParameter $cacertParameter -Dlogs.dir=$LOGS_DIR -cp $CLASS_PATH Application > /dev/null 2> /dev/null

Когда запускается серверное приложение это sets RMI on port 40031 correctly, я также проверил, что клиент и сервер правильно установили sh TCP соединение. Я должен сказать, что все работает отлично без использования dokcer.

Вся информация, которую я основал о RMI, касается попыток мониторинга приложения с JMX, что не в моем случае, решение, которое дано, состоит в добавлении определенных флагов при запуске Например:

JMX_PORT = 9010
HOST = "0.0.0.0"
java \
-Dsun.management.jmxremote.level = FINEST \
-Dsun.management.jmxremote.handlers = java.util.logging.ConsoleHandler \
-Djava.util.logging.ConsoleHandler.level = FINEST \
-Dcom.sun.management.jmxremote.local.only = false \
-Dcom.sun.management.jmxremote.ssl = false \
-Dcom.sun.management.jmxremote.authenticate = false \
-Dcom.sun.management.jmxremote.port = $ JMX_PORT \
-Dcom.sun.management.jmxremote.rmi.port = $ JMX_PORT \
-Dcom.sun.management.jmxremote.host = $ HOST \
-Djava.rmi.server.hostname = $ HOST \
-agentlib: jdwp = transport = dt_socket, server = y, suspend = n, address = 5005 \
-jar /opt/app/app.jar

В этом случае решение не дает ожидаемого результата.

Есть ли у вас идеи для решения этой проблемы?

Источники уже рассмотрены для попытаться решить проблему:

https://github.com/cstroe/java-jmx-in-docker-sample-app

http://adambien.blog/roller/abien/entry/how_to_establish_jmx_connection

...