如何在 docker 容器中为 karaf 配置 jmx 端口?
How to configure jmx port for karaf in docker container?
我想使用 visualvm 检查 docker 容器中的 karaf 中的线程 运行。
我做了什么:
- 为 docker
公开 44444 和 1099
- 在 org.apache.karaf.management.cfg 中,尝试设置 rmiRegistryHost 和
rmiServerHost 多次与 docker 的不同组合
容器 ip 和 docker 内部 ip 不起作用。
- 尝试更改 EXTRA_JAVA_OPTS="-Djava.rmi.server.hostname=${docker-container-ip} -Dcom.sun.management.jmxremote.local.only=false"
需要帮助。
问题出在 RMI 协议上,它不能很好地处理提供 RMI 端点的主机(Docker 主机)不是 RMI 服务器主机(您 Docker容器)。
我让它工作的方法是
export EXTRA_JAVA_OPTS=="-Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.rmi.port=$JMX_RMI_PORT -Dcom.sun.management.jmxremote.port=$JMX_REMOTE_PORT -Djava.rmi.server.hostname=$HOST_HOSTNAME"
我用docker-compose 设置了环境,但是你可以用固定值替换环境变量,只要你运行 你的主机上只有一个容器和镜像。我分别为 RMI 和 REMOTE 端口使用 1097 和 1098。这里有两点很重要:
- RMI 和 REMOTE 端口都必须映射到同一端口号上的 docker 主机。例如。如果您使用 1097 作为容器中的 RMI 端口,则必须将该端口发布到主机上的 1097。
java.rmi.server.hostname
是您的 docker 主机的主机名或 IP,而不是容器的 IP
假设您正在使用上述端口,然后连接到
service:jmx:rmi:///jndi/rmi://<your_docker_host>:1098/jmxrmi
现在应该可以工作了。
虽然我从来没有让 Karaf 的 JMX 访问控制工作。
为 JMX 使用 JMXMP 而不是 RMI 可能会使事情变得更容易,但 Karaf 不支持开箱即用。
我想使用 visualvm 检查 docker 容器中的 karaf 中的线程 运行。
我做了什么:
- 为 docker 公开 44444 和 1099
- 在 org.apache.karaf.management.cfg 中,尝试设置 rmiRegistryHost 和 rmiServerHost 多次与 docker 的不同组合 容器 ip 和 docker 内部 ip 不起作用。
- 尝试更改 EXTRA_JAVA_OPTS="-Djava.rmi.server.hostname=${docker-container-ip} -Dcom.sun.management.jmxremote.local.only=false"
需要帮助。
问题出在 RMI 协议上,它不能很好地处理提供 RMI 端点的主机(Docker 主机)不是 RMI 服务器主机(您 Docker容器)。
我让它工作的方法是
export EXTRA_JAVA_OPTS=="-Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.rmi.port=$JMX_RMI_PORT -Dcom.sun.management.jmxremote.port=$JMX_REMOTE_PORT -Djava.rmi.server.hostname=$HOST_HOSTNAME"
我用docker-compose 设置了环境,但是你可以用固定值替换环境变量,只要你运行 你的主机上只有一个容器和镜像。我分别为 RMI 和 REMOTE 端口使用 1097 和 1098。这里有两点很重要:
- RMI 和 REMOTE 端口都必须映射到同一端口号上的 docker 主机。例如。如果您使用 1097 作为容器中的 RMI 端口,则必须将该端口发布到主机上的 1097。
java.rmi.server.hostname
是您的 docker 主机的主机名或 IP,而不是容器的 IP
假设您正在使用上述端口,然后连接到
service:jmx:rmi:///jndi/rmi://<your_docker_host>:1098/jmxrmi
现在应该可以工作了。
虽然我从来没有让 Karaf 的 JMX 访问控制工作。
为 JMX 使用 JMXMP 而不是 RMI 可能会使事情变得更容易,但 Karaf 不支持开箱即用。