JMX和在Docker内的Tomcat上进行debugging

我正在尝试设置IntelliJ连接到运行在Docker容器中的Tomcat实例。 我希望能够使用远程debugging,并使用JMX进行远程部署。

我可以使用环境variables启用远程debugging

JPDA_ADDRESS=8000 JPDA_TRANSPORT=dt_socket 

并通过启动Tomcat与catalina.sh jpda run ,所以远程debugging工作没有问题。

我也可以用这个替代

 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_OPTSJAVA_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 

我已经validation了192.168.99.100是我的docker机器的IP。 我试图用VisualJM和IntelliJ连接到JMX,它不起作用。 我已经validation端口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 。 端口80808000工作,所以1099也应该正确映射。

当我为jmxremote.host和server.hostname使用0.0.0.0时,我能够连接

  HOST=0.0.0.0 java -Xmn100M -XX:+PrintGCDetails -XX:MinHeapFreeRatio=20 -XX:MaxHeapFreeRatio=40 -Xmx384M $JAVA_OPTS\ -Dcom.sun.management.config.file=/opt/app/management.properties \ -Djava.util.logging.config.file=/opt/app/logging.properties \ -Dcom.sun.management.jmxremote.port=$JMX_PORT \ -Dcom.sun.management.jmxremote.rmi.port=$JMX_PORT \ -Dcom.sun.management.jmxremote.host=$HOST \ -Djava.rmi.server.hostname=$HOST \ -jar /opt/app/app.jar