有没有一种方法可以通过SSH与Docker容器中运行的远程进程建立JMX连接?

时间:2019-01-31 17:10:58

标签: docker ssh jmx ssh-tunnel docker-container

我正在尝试通过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中,它失败并显示“连接失败”。

有什么想法我做错了吗?

1 个答案:

答案 0 :(得分:1)

一切都正确...或多或少。 我的本地计算机运行Windows,并且我正在Git Bash上创建SSH隧道! 如果我使用Windows命令行或Putty创建SSH隧道,则可以正常工作...