Запуск в контейнере Docker привел к множеству дополнительных проблем при подключении, так что, надеюсь, это кому-нибудь поможет. В итоге мне понадобилось добавить следующие опции, которые я объясню ниже:
-Dcom.sun.management.jmxremote=true
-Dcom.sun.management.jmxremote.local.only=false
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Djava.rmi.server.hostname=${DOCKER_HOST_IP}
-Dcom.sun.management.jmxremote.port=9999
-Dcom.sun.management.jmxremote.rmi.port=9998
DOCKER_HOST_IP
В отличие от локального использования jconsole, вам нужно объявить другой IP-адрес, который вы, вероятно, не увидите в контейнере. Вам нужно будет заменить ${DOCKER_HOST_IP}
на разрешаемый извне IP (DNS-имя) вашего хоста Docker.
Порты JMX Remote и RMI
Похоже, JMX также требуется доступ к интерфейсу удаленного управления ( jstat ), который использует другой порт для передачи некоторых данных при арбитраже соединения. Я не видел нигде сразу очевидного в jconsole
, чтобы установить это значение. В связанной статье процесс был:
- Попробуйте подключиться с
jconsole
с включенным ведением журнала
- Сбой
- Выясните, какой порт
jconsole
пытался использовать
- При необходимости используйте правила
iptables
/ firewall
, чтобы разрешить подключение этого порта
Хотя это работает, это, конечно, не автоматизируемое решение. Я выбрал обновление с jconsole до VisualVM , поскольку оно позволяет вам явно указать порт, на котором работает jstatd
. В VisualVM добавьте новый удаленный хост и обновите его значениями, соответствующими указанным выше:
Затем щелкните правой кнопкой мыши новое подключение к удаленному хосту и Add JMX Connection...
Не забудьте установить флажок для Do not require SSL connection
. Надеюсь, это позволит вам подключиться.