如何从在docker容器中运行的进程访问JMX(Java Bean)

时间:2015-01-21 05:17:57

标签: java docker jmx

当使用Docker运行进程时,为什么连接到JMX端口(使用JConsole)如此困难。

当然我将JMX端口暴露给主机,甚至在运行Java进程时使用 Sun特定选项(遵循http://ptmccarthy.github.io/2014/07/24/remote-jmx-with-docker/的说明)。

我能够telnet到主机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

3 个答案:

答案 0 :(得分:0)

过去,两个港口必须不同。请尝试一下。

如果那不起作用:

Tomcat提供了一个额外的组件来设置所提到的第二个端口, JMX远程生命周期监听器

请看一下:

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

答案 1 :(得分:0)

您目前的看法是正确的。为了至少尝试让它工作,我尝试禁用auth& SSL。然后,一旦你开始工作,考虑重新启用你需要的任何安全性:

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

答案 2 :(得分:-1)

实际上,您需要这两个端口不同。一个端口用于RMI注册表,另一个端口用于远程协议。

从jconsole / visualvm指定连接服务器的URL时,请使用服务器端“-Dcom.sun.management.jmxremote.port”中设置的端口。