Я хочу сделать РЕАЛЬНОЕ удаленное управление JMX в Докер контейнер работает приложение Spring загрузки:JMX - удаленное управление в Докер-создании сообщения контейнера - Не удалось получить RMIServer окурок
архитектура эскиз
Я читал много документации и я понимаю, что это должно быть конфигурация на стороне сервера:
java \
-Djava.rmi.server.hostname=10.0.2.15 \
-Dcom.sun.management.jmxremote.port=8600 \
-Dcom.sun.management.jmxremote.rmi.port=8601 \
-Dcom.sun.management.jmxremote.ssl=false \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.local.only=false \
-jar my-spring-boot-app.jar
URL-адрес, используемый в JVisualVM, должен быть service:jmx:rmi://10.0.2.15:8601/jndi/rmi://10.0.2.15:8600/jmxrmi
.
НО ЭТО НЕ (Не удалось получить RMIServer заглушки) в JVisualVM (начало на компьютере 1) - это выход журнала:
Вызванный: java.io.IOException: Не удалось получить RMIServer заглушки на javax.management.remote.rmi.RMIConnector.connect (RMIConnector.java:369) на com.sun.tools.visualvm.jmx.impl.JmxModelImpl $ ProxyClient.tryConnect (JmxModelImpl.java:549) [catch] в com.sun.tools.visualvm.jmx.impl.JmxModelImpl $ ProxyClient. подключения (JmxModelImpl.java:486) на com.sun.tools.visualvm.jmx.impl.JmxModelImpl.connect (JmxModelImpl.java:214)
ЭТО РАБОТАЕТ если я изменить конфигурацию приложения сервера до -Djava.rmi.server.hostname=172.19.0.6
(я использую сеть докеров BRDIGE ... поэтому маршрутизация до 172.19.0.6
возможно). С этой конфигурацией я могу выполнить JMX-мониторинг, если JVisualVM запущен на Docker Host (машина 2). Но это НЕТ РЕАЛЬНОГО ДИСТАНЦИОННОГО управления, потому что маршрутизация до 172.19.0.6
обычно невозможна.
Некоторые дополнительные сведения:
порт 8600, 8601 подвергаются и показаны в виде СЛУШАТЬ:
[email protected] ~/temp/ % netstat -taupen | grep 860 tcp6 0 0 :::8600 :::* LISTEN 0 254349 - tcp6 0 0 :::8601 :::* LISTEN 0 254334 -
и telnet 10.0.2.15 8600
из машины 1 можно.
Я получаю то же неправильное поведение с Java 1.8.0_111
и 1.7.0_80
на докерных контейнерах и докер-хост (работает JVisualVM).
BTW: эта конфигурация работает, если приложение Spring Boot работает непосредственно на машине 2 (без докера).
Я знаю, что JMX обычно ведет переговоры о случайных портах ... Я пытаюсь сделать их явными в своей конфигурации. Существует также одно дополнительное свойство -Dcom.sun.aas.jconsole.server.cbport=8602
, которое можно установить, но это не решило проблему.
Где моя вина?
"Порт 8600, 8601 подвергаются" означает, что вы побежали как 'Докер запустить -p 8600: 8600 -p 8601 : 8601 somedockerimage', чтобы иметь эти порты на y наш хост, а также изображение докеров также «ЭКСПОЗИЦИЯ» эти порты внутри страны (например, http://stackoverflow.com/a/32806333/995891)? – zapl
точно ... Я не знаю, важно ли это, но контейнеры запускаются/управляются 'docker-compose' ... Я буду тестировать, если это что-то изменит – Pierre
@zapl: wow ... он работает, когда делаете это с помощью 'docker run', но не через' docker-compose up' ... это мой 'docker-compose.yml': ' my-spring-boot-service: ... портов: - «8610: 8610 " -" 8611: 8611 " – Pierre