簡體   English   中英

如何從Docker容器中運行的進程訪問JMX(Java Beans)

[英]How to access JMX (Java Beans) from a process running in docker container

當使用Docker運行進程時,為什么很難連接到JMX端口(使用JConsole)。

當然,我已經向主機公開了JMX端口 ,甚至在運行Java進程時使用了Sun特定的選項 (按照http://ptmccarthy.github.io/2014/07/24/remote-jmx-with- docker / )。

我可以遠程登錄到主機ip和公開的JMX端口,這表明該端口可訪問。 但是我不知道一種使用JConsole並連接到容器中運行的JMX服務的方法。

-Djava.rmi.server.hostname=$JMX_HOSTNAME
-Dcom.sun.management.jmxremote.port=$JMX_PORT
-Dcom.sun.management.jmxremote.rmi.port=$JMX_PORT

過去,兩個端口必須不同。 請嘗試一下。

如果那不起作用:

Tomcat提供了一個額外的組件來設置提到的第二個端口,即JMX Remote Lifecycle Listener

請看一下:

http://tomcat.apache.org/tomcat-7.0-doc/extras.html

http://tomcat.apache.org/download-70.cgi

我將此設置與tomcat / lib目錄中的catalina-jmx-remote.jar一起使用來通過:

-Dcom.sun.management.jmxremote 
-Dcom.sun.management.jmxremote.ssl=false 
-Djava.rmi.server.hostname=localhost
-DrmiRegistryPortPlatform=10381 
-DrmiServerPortPlatform=10380

加上這些,但您在開發環境中將不需要它們。

-Dcom.sun.management.jmxremote.password.file=/home/tomcat/jmxremote.password 
-Dcom.sun.management.jmxremote.access.file=/home/tomcat/jmxremote.access 
-Dcom.sun.management.jmxremote.authenticate=true

您目前所擁有的看起來正確。 為了至少嘗試使其工作,我將嘗試禁用auth&ssl。 然后,一旦它開始工作,請考慮重新啟用所需的任何安全性:

-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false

確實,您需要這兩個端口不同。 一個端口用於RMI注冊表,另一個端口用於遠程協議。

指定從jconsole / visualvm連接到服務器的URL時,請使用服務器端“ -Dcom.sun.management.jmxremote.port”中設置的端口。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM