javajmx及其在Tomcat内部Docker上的调试
我正在尝试设置IntelliJ以连接到Docker容器中运行的Tomcat实例。我希望能够使用远程调试,并使用JMX进行远程部署
我可以使用环境变量启用远程调试
JPDA_ADDRESS=8000
JPDA_TRANSPORT=dt_socket
通过使用catalina.sh jpda run
启动Tomcat,远程调试工作不会出现问题
我也可以选择使用
CATALINA_OPTS='-agentlib:jdwp=transport=dt_socket,address=8000,suspend=n,server=y'
然后我就不需要使用catalina.sh jpda run
无论我做什么,我都无法让JMX工作。我验证了我在/usr/local/tomcat/lib`中有catalina-jmx-remote.jar
我已尝试将CATALINA_OPTS
和JAVA_OPTS
设置为
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.local.only=false
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.port=1099
-Dcom.sun.management.jmxremote.rmi.port=1099
-Djava.rmi.server.hostname=192.168.99.100
-Dcom.sun.management.jmxremote.ssl=false
我已经验证了192.168.99.100
是我的docker机器的IP。我曾尝试使用VisualJM和IntelliJ连接到JMX,但不起作用。我已验证端口1099
是否已打开并可从主机使用
Tomcat正在接收JMX参数
20-Apr-2016 23:50:14.019 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.rmi.port=1099 -Djava.rmi.server.hostname=192.168.99.100 -Dcom.sun.management.jmxremote.ssl=false
为什么我不能让JMX工作?任何日志中都没有可用的信息,无论我如何尝试,这都不会起作用
编辑:lsof -i :1099
显示该端口上没有运行任何内容
我在Mac OS X上运行。这是一台docker机器,但我相信docker在Mac上使用virualbox,因为它不能在本机上运行容器。
我已经映射了端口docker ps
显示0.0.0.0:1099->1099/tcp, 0.0.0.0:8000->8000/tcp, 0.0.0.0:8080->8080/tcp
。端口8080
和8000
工作正常,因此1099也应该正确映射
# 1 楼答案
当我为jmxremote使用0.0.0.0时,我能够连接。主机和服务器。主机名