我已经能够将VisualVM连接到我的Java进程,并在Docker容器中运行,并执行以下操作:
docker run \
--rm \
--entrypoint=java \
-p 9010:9010 \
my-user/my-image \
-Dcom.sun.management.jmxremote \
-Dcom.sun.management.jmxremote.port=9010 \
-Dcom.sun.management.jmxremote.rmi.port=9010 \
-Dcom.sun.management.jmxremote.local.only=false \
-Dcom.sun.management.jmxremote.authenticate=false \
-Dcom.sun.management.jmxremote.ssl=false \
-Djava.rmi.server.hostname='192.168.99.100' \
-jar /my-app-1.0-SNAPSHOT.jar
但是,此解决方案有几个问题:
我一直在使用SSH隧道,但是没有运气。 JVM不喜欢从端口32878进行访问,即,即使它已映射到容器中的9010。
有什么想法吗?
最佳答案
我将docker与大量Web应用程序和休息服务一起使用。
为了直接在我的本地浏览器中访问它们(我是Windows 10用户),我已经安装了代理容器。该代理具有一个暴露的端口“1080:1080”。
然后,我使用代理插件(FoxyProxy)进入浏览器。而且我可以访问任何端口的任何地址。使用它,而您不需要在其他容器上进行任何其他端口映射,则代理将处理所有流量。
这是我在容器中使用的命令
service sshd start && sshpass -p 'password' ssh -o StrictHostKeyChecking=no -N -D 0.0.0.0:1080 localhost
关于java - 我可以在不暴露RMI端口本身的情况下将VisualVM连接到Docker中的远程Java进程吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38718708/