如何从Docker容器中运行的进程访问JMX(Java Beans)
当使用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
过去,两个港口必须有所不同。 请尝试一下。
如果那不工作:
Tomcat提供了一个额外的组件来设置所提到的第二个端口,即JMX Remote Lifecycle Listener 。
请看看:
http://tomcat.apache.org/tomcat-7.0-doc/extras.html
http://tomcat.apache.org/download-70.cgi
我使用这个设置与catalina-jmx-remote.jar在我的tomcat / lib目录中来通过:
-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
你目前有什么看起来是正确的。 至less试着让它工作,我会尝试禁用auth&ssl。 然后,一旦你得到它的工作,想想重新启用您需要的任何安全:
-Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false
事实上,你需要这两个端口是不同的。 一个端口用于RMIregistry,另一个用于远程协议。
从jconsole / visualvm指定要连接到服务器的URL时,请使用服务器端“-Dcom.sun.management.jmxremote.port”中设置的端口。
- 我们如何将我们的docker应用程序连接到本地运行的postgres?
- 通过导出/导入移动Docker容器:丢失像启动命令一样的configuration
- 在其他机器上部署在Windows Docker容器中的应用程序
- 无法连接到docker中的postgres服务器
- 无法从容器与Django应用程序连接到MySQLdocker容器
- 我应该在我的泊坞窗图像中包含我的Web应用程序源代码,还是在运行容器时安装它?
- 如何在没有此错误的情况下运行`gcloud preview app setup-managed-vms`?
- 在Docker中连接到mongoDB套接字
- 在Docker中运行简单的Java Gradle应用程序