今天在配置docker和JMX监控的时候,看到有一个细节和非容器环境中的JMX配置不太一样。所以在这里写一下,以备其他人查阅。
一般情况下,我们配置JMX只要写上下面这些参数就可以了。
以下是无密码监控时的JMX配置参数(有密码监控的配置和常规监控无异)。
-
-Dcom.sun.management.jmxremote -
-Dcom.sun.management.jmxremote.port=9998 -
-Djava.rmi.server.hostname=<serverip> -
-Dcom.sun.management.jmxremote.ssl=false -
-Dcom.sun.management.jmxremote.authenticate=false
但是在docker容器中这样配置的时候,会出现这个错误。

这里就要说明一下逻辑了。为什么会这样呢? 先看docker环境的网络结构。
容器使用默认的网络模型,就是bridge模式。在这种模式下是docker run时做的DNAT规则,实现数据转发的能力。所以我们看到的网络信息是这样的:
docker中的网卡信息:
-
[root@f627e4cb0dbc /]# ifconfig -
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 -
inet 172.18.0.3 netmask 255.255.0.0 broadcast 0.0.0.0 -
inet6 fe80::42:acff:fe12:3 prefixlen 64 scopeid 0x20<link> -
ether 02:42:ac:12:00:03 txqueuelen 0 (Ethernet) -
RX packets 366 bytes 350743 (342.5 KiB) -
RX errors 0 dropped 0 overruns 0 frame 0 -
TX packets 358 bytes 32370 (31.6 KiB) -
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
docker中的路由信息:
-
[root@a2a7679f8642 /]# netstat -r -
Kernel IP routing table -
Destination Gateway Genmask Flags MSS Window irtt Iface -
default gateway 0.0.0.0 UG 0 0 0 eth0 -
172.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0 -
[root@a2a7679f8642 /]#
宿主机上的对应网卡信息:
-
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 -
inet 172.18.0.1 netmask 255.255.0.0 broadcast 0.0.0.0 -
ether 02:42:44:5a:12:8f txqueuelen 0 (Ethernet) -
RX packets 6691477 bytes 4981306199 (4.6 GiB) -
RX errors 0 dropped 0 overruns 0 frame 0 -
TX packets 6751310 bytes 3508684363 (3.2 GiB) -
TX errors 0 dropp

本文详细介绍了在Docker容器环境下配置JMX的具体步骤及注意事项,解释了JMX端口映射的重要性,并给出了实际配置示例。
最低0.47元/天 解锁文章
956

被折叠的 条评论
为什么被折叠?



