如何通过 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?