我正在尝试远程监控在docker中运行的JVM。配置如下:
机器1:在Ubuntu机器上以docker方式运行JVM(例如,运行kafka);该机器的IP地址为10.0.1.201;在docker中运行的应用程序位于172.17.0.85。
机器2:运行JMX监视器。
请注意,当我从机器2运行JMX监视器时,会出现以下错误(请注意:当我运行jconsole、jvisualvm、jmxtrans和node-jmx/npm:jmx时都会出现相同的错误):
每个JMX监视工具失败时的堆栈跟踪如下:
java.rmi.ConnectException: Connection refused to host: 172.17.0.85; nested exception is
java.net.ConnectException: Operation timed out
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:619)
(followed by a large stack trace)
现在有趣的部分是,当我在运行docker的同一台机器上(来自上面的machine 1)运行相同的工具(jconsole、jvisualvm、jmxtrans和node-jmx/npm:jmx)时,JMX监视正常工作。
我认为这表明我的JMX端口是活动的并且正常工作,但是当我从远程执行JMX监视(来自机器2)时,看起来JMX工具无法识别内部docker IP(172.17.0.85)
下面是在机器1上与JMX监视工作相关的(我认为)网络配置元素(注意docker ip,172.17.42.1):
docker0 Link encap:Ethernet HWaddr ...
inet addr:172.17.42.1 Bcast:0.0.0.0 Mask:255.255.0.0
inet6 addr:... Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:6787941 errors:0 dropped:0 overruns:0 frame:0
TX packets:4875190 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1907319636 (1.9 GB) TX bytes:639691630 (639.6 MB)
wlan0 Link encap:Ethernet HWaddr ...
inet addr:10.0.1.201 Bcast:10.0.1.255 Mask:255.255.255.0
inet6 addr:... Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:4054252 errors:0 dropped:66 overruns:0 frame:0
TX packets:2447230 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2421399498 (2.4 GB) TX bytes:1672522315 (1.6 GB)
这是远程机器 (机器2) 上相关的网络配置元素,我从中获取JMX错误:
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
options=3<RXCSUM,TXCSUM>
inet6 ::1 prefixlen 128
inet 127.0.0.1 netmask 0xff000000
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
nd6 options=1<PERFORMNUD>
en1: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
ether ....
inet6 ....%en1 prefixlen 64 scopeid 0x5
inet 10.0.1.203 netmask 0xffffff00 broadcast 10.0.1.255
nd6 options=1<PERFORMNUD>
media: autoselect
status: active
entrypoint.sh
的Dockerfile
,以及一个用于轻松部署的docker-compose.yml
。 - cstroe