2017-08-14 143 views
2

我想使用visualvm來檢查在docker容器中的karaf中運行的線程。如何在Docker容器中配置karaf的jmx端口?

我做了什麼:

  1. 暴露44444和1099的碼頭工人在org.apache.karaf.management.cfg
  2. ,試圖與碼頭工人 容器的不同組合設置rmiRegistryHost和 rmiServerHost幾次IP和碼頭工人的內部IP不起作用。
  3. 試圖改變EXTRA_JAVA_OPTS = 「 - Djava.rmi.server.hostname = $ {搬運工容器-IP} -Dcom.sun.management.jmxremote.local.only =假」

需要幫助。

回答

1

問題是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支持。