使用Docker for Mac与JMX连接

我正在为使用Docker for Mac在Docker容器中运行的Tomcat设置JMX连接而苦苦挣扎。 我想我理解基础知识,并在tomcat / bin目录中有一个setenv.sh,如下所示:

CATALINA_OPTS="-Dcom.sun.management.jmxremote=true\ -Dcom.sun.management.jmxremote.local.only=false\ -Dcom.sun.management.jmxremote.authenticate=false\ -Dcom.sun.management.jmxremote.ssl=false\ -Djava.rmi.server.hostname=185.83.15.228\ -Dcom.sun.management.jmxremote.port=9999\ -Dcom.sun.management.jmxremote.rmi.port=9999" 

我认为有问题的部分可能是java.rmi.server.hostname属性。 我已经设置这个主机的IP,但我也尝试了其他明显的东西。 我相信这应该是jconsole或jvisualvm将运行的机器的IP,但这不适用于我。

我开始像这样的容器:

 docker run -d -v /Users/timbo/tomcat-jmx.sh:/usr/local/tomcat/bin/setenv.sh -p 8080:8080 -p 9999:9999 tomcat:8.0 

所以端口9999是暴露的。 当我尝试连接使用jvisualvm连接到本地主机:9999(这将为Mac的Docker路由到实际上在172.17.0.2的容器)我得到的错误:无法连接到本地:9999使用服务:jmx:rmi:// / JNDI / RMI://本地主机:9999 / jmxrmi

任何提示什么是错的?

好的,我想我终于find了。 将java.rmi.server.hostname的值设置为主机的主机名(例如mymac.local,或者主机名返回的任何东西)似乎可以使其工作。 所有其他设置都可以。

Docker for Mac的工作方式有点不同。 您映射的端口实际上映射到它在后台运行的Linux VM。 这个虚拟机通常在IP 192.168.99.100 。 所以你应该尝试连接到192.168.99.100:9999

要validation您的VM的IP是什么,请打开Docker CLIterminal并在下面执行

 echo $DOCKER_HOST tcp://192.168.99.100:2376