Spring boot 无法将JConsole连接到Docker容器中运行的Springboot应用程序

Spring boot 无法将JConsole连接到Docker容器中运行的Springboot应用程序,spring-boot,docker,jconsole,Spring Boot,Docker,Jconsole,我在Docker容器中成功部署了一个Springboot应用程序,我正在尝试将JConsole连接到它。在容器内,正在使用以下标志执行应用程序: -Dcom.sun.management.jmxremote -Djava.rmi.server.hostname="$JMX_RMI_SERVER_HOST" -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.local.only=false -Dcom.s

我在Docker容器中成功部署了一个Springboot应用程序,我正在尝试将JConsole连接到它。在容器内,正在使用以下标志执行应用程序:

-Dcom.sun.management.jmxremote
-Djava.rmi.server.hostname="$JMX_RMI_SERVER_HOST"
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.local.only=false
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.port=10122
-Dcom.sun.management.jmxremote.rmi.port=10122
其中
JMX\u RMI\u SERVER\u HOST=$(主机名-i)

在我的Dockerfile中,我有
EXPOSE 10122
和compose的ports部分
10122:10122

JConsole无法连接到
localhost:10122
,很可能是因为我在日志中看到以下警告:

15:40:35.896 [RMI TCP Accept-0] [] [] [] WARN  sun.rmi.transport.tcp - RMI TCP Accept-0: accept loop for ServerSocket[addr=0.0.0.0/0.0.0.0,localport=44567] throws
java.net.SocketTimeoutException: Accept timed out
    at java.base/java.net.PlainSocketImpl.socketAccept(Native Method)
    at java.base/java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:458)
    at java.base/java.net.ServerSocket.implAccept(ServerSocket.java:551)
    at java.base/java.net.ServerSocket.accept(ServerSocket.java:519)
    at java.rmi/sun.rmi.transport.tcp.TCPTransport$AcceptLoop.executeAcceptLoop(TCPTransport.java:394)
    at java.rmi/sun.rmi.transport.tcp.TCPTransport$AcceptLoop.run(TCPTransport.java:366)
    at java.base/java.lang.Thread.run(Thread.java:834)
15:40:35.896 [RMI TCP Accept-10122] [] [] [] WARN  sun.rmi.transport.tcp - RMI TCP Accept-10122: accept loop for ServerSocket[addr=0.0.0.0/0.0.0.0,localport=10122] throws
java.net.SocketTimeoutException: Accept timed out
    at java.base/java.net.PlainSocketImpl.socketAccept(Native Method)
    at java.base/java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:458)
    at java.base/java.net.ServerSocket.implAccept(ServerSocket.java:551)
    at java.base/java.net.ServerSocket.accept(ServerSocket.java:519)
    at java.rmi/sun.rmi.transport.tcp.TCPTransport$AcceptLoop.executeAcceptLoop(TCPTransport.java:394)
    at java.rmi/sun.rmi.transport.tcp.TCPTransport$AcceptLoop.run(TCPTransport.java:366)
    at java.base/java.lang.Thread.run(Thread.java:834)

有人知道我错过了什么吗?感谢您的帮助

您确定
$JMX\u RMI\u SERVER\u HOST
指向您启动
docker run
的主机/ip吗?这可能有助于我相信$JMX_RMI_SERVER_HOST应该是容器的ip地址,而不是主机。无论如何,我试着用0.0.0.0以防万一(注意,我正在本地机器上运行容器),但结果是一样的。你看了另一个问题了吗?被接受的答案恰恰相反(除非我读得不好)。是的,我读了,我相信这不应该是主机的IP。无论如何,我尝试了主机IP地址,结果是一样的