如何通过 JMX 连接到远程 Docker 容器

Posted

技术标签:

【中文标题】如何通过 JMX 连接到远程 Docker 容器【英文标题】:How to connect to a remote Docker container via JMX 【发布时间】:2017-02-22 14:35:15 【问题描述】:

我有一个 Spring Boot 应用程序在远程机器上的容器中运行,我必须使用哪些 JVM 参数通过 Java Mission Control 或 JVisual VM(通过 JMX)连接到它?

【问题讨论】:

【参考方案1】:

使用以下 JAVA_OPTIONS 启动容器:

-Dcom.sun.management.jmxremote 
-Dcom.sun.management.jmxremote.rmi.port=7012 
-Dcom.sun.management.jmxremote.port=7012
-Dcom.sun.management.jmxremote.authenticate=false 
-Dcom.sun.management.jmxremote.ssl=false 
-Djava.rmi.server.hostname=<public_ip>

此外,请确保您在容器内公开您正在侦听的相同端口(例如 docker run container -p 7012:7012 ...)

【讨论】:

我怎么强调“相同端口”的评论是多么重要。如果不是这种情况,它将无法工作。 @MihaiTodor 你刚刚解决了我的问题!关于如何远程连接的所有其他说明都不包括这个“陷阱”!谢谢老哥! 不客气!即使您在远程主机上运行容器并且希望通过 ssh 进行端口转发以连接到它,localhost 上的端口也需要与容器中的端口相同。我不知道为什么需要这样,但这就是我的诀窍。 就我而言,我不想公开 JMX 端口(在我的 docker-compose.yml 中将其映射为 127.0.0.1:9090:9090),并在访问它时进行 ssh 端口转发。问题是除了相同的端口“gotcha”之外,我还必须设置-Djava.rmi.server.hostname=127.0.0.1,因为它不适用于主机的 IP 或机器名称。

以上是关于如何通过 JMX 连接到远程 Docker 容器的主要内容,如果未能解决你的问题,请参考以下文章

如何连接到在 docker 容器上运行的远程 Jupyter Notebook?

如何从 docker 容器连接到远程 mysql 托管?

在 Docker 容器中将 Spyder 连接到远程 Jupyter Notebook

如何连接到远程机器上的 docker mysql 容器

visualvm 可以通过 JMX 自动连接到远程进程吗?

如何将我的 docker 连接到远程数据库?