問題是RMI協議,在提供RMI端點的主機(Docker主機)不是RMI服務器(Docker容器中的VM)的主機的情況下,它並沒有很好地處理這種情況。
我就開始工作的方式是
export EXTRA_JAVA_OPTS=="-Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.rmi.port=$JMX_RMI_PORT -Dcom.sun.management.jmxremote.port=$JMX_REMOTE_PORT -Djava.rmi.server.hostname=$HOST_HOSTNAME"
我設定泊塢窗,構成了環境,但只要你像只運行一個容器,你可以替換固定值的環境變量在你的主機上。我分別使用1097和1098作爲RMI和REMOTE端口。這裏有兩件事很重要:
- RMI和REMOTE端口都必須映射到您的碼頭主機在相同的端口號。例如。如果使用1097作爲容器中的RMI端口,則必須將該端口發佈到主機上的1097端口。
- 的
java.rmi.server.hostname
是你的泊塢窗主機,容器
假設你正在使用上述端口的不是IP的主機名或IP,然後連接到
service:jmx:rmi:///jndi/rmi://<your_docker_host>:1098/jmxrmi
現在應該工作。
雖然我從來沒有得到過Karaf的JMX accecss控件。
使用JMXMP而不是RMI for JMX可能會讓事情變得更簡單,但它不受開箱即用的Karaf支持。