我正在尝试通过SSH隧道建立与远程docker容器中运行的进程的JMX连接。在Java Mission Control,VisualVM或JConsole中,连接超时,无法连接。
如果我在JConsole(或其他任何一个)中直接连接到远程计算机ip,则会建立JMX连接。使用SSH隧道时会出现问题。
我正在使用以下方法建立从本地计算机到远程计算机的SSH隧道
ssh username@remote-machine-ip -L 9090:127.0.0.1:9090
在docker容器中,我暴露了9090端口,并且对JVM使用了以下参数:
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.local.only=false
-Dcom.sun.management.jmxremote.port=9090
-Dcom.sun.management.jmxremote.rmi.port=9090
-Dcom.sun.management.jmxremote.ssl=false
-Djava.rmi.server.hostname=127.0.0.1
-Djava.rmi.server.useLocalHostname=true
在-Djava.rmi.server.hostname
中,我已经尝试使用127.0.0.1,localhost,Docker容器托管主机ip ...
在JConsole中,我使用127.0.0.1:9090
进行连接。
在远程计算机上运行tcpdump,我可以捕获到达9090端口的某些数据包,但是在JConsole中,它失败并显示“连接失败”。
有什么想法我做错了吗?
答案 0 :(得分:1)
一切都正确...或多或少。 我的本地计算机运行Windows,并且我正在Git Bash上创建SSH隧道! 如果我使用Windows命令行或Putty创建SSH隧道,则可以正常工作...