Я пытаюсь Dockerize
Java серверное приложение, у меня есть два клиентских приложения, графический интерфейс (GUI) и эмулятор.
Эмулятор выполняется на хост-компьютере и взаимодействует с серверным приложением, работающим в контейнере Docker, через два порта 10008 - 10009
через TCP protocol
.
Графический интерфейс работает на хост-компьютере и связывается с приложением сервера, работающим в контейнере 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