提问人:Santosh Jagtap 提问时间:8/4/2023 最后编辑:Santosh Jagtap 更新时间:8/18/2023 访问量:105
运行“remote_debug”时出错:无法打开调试器端口 (localhost:4004):java.io.IOException“握手失败 - 连接预先关闭”
Error running 'remote_debug': Unable to open debugger port (localhost:4004): java.io.IOException "handshake failed - connection prematurally closed"
问:
从intelliJIdea连接到远程jvm调试端口时出现以下错误。 注意:我在我的 intellijIdea 项目中使用 Java 17,并且还有带有 Java 17 Env 的 docker 映像。
错误:
Error running 'remote_jvm_debug': Unable to open debugger port (localhost:4004): java.io.IOException "handshake failed - connection prematurally closed"
在 Dockerfile 中,我使用以下环境 conf:
ENV JAVA_TOOL_OPTIONS="-Xdebug -agentlib:jdwp=transport=dt_socket,address=*:4004,server=y,suspend=n"
我也在我的 Dockerfile 中尝试了以下 ENV,但没有运气:
ENV JAVA_TOOL_OPTIONS="-agentlib:jdwp=transport=dt_socket,address=0.0.0.0:4004,server=y,suspend=n"
为了在运行 docker 容器的远程服务器上建立隧道,我使用以下命令:
ssh -f 10.12.91.11 -L 4004:127.0.0.1:4004 -N
在我的docker-compose.yml文件中,我有以下端口和ENV conf:
ports:
- "8002:80"
- "4004:4004"
environment:
JVM_ARGS: *jvmflags
CATALINA_OPTS_EXTRA: *jvmflags
我尝试在我的 Dockerfile 中使用下面的 ENV,这是在 stackoverflow 和其他地方建议的,但它在我的情况下不起作用:
ENV JAVA_TOOL_OPTIONS=“-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:4004”
答:
0赞
Santosh Jagtap
8/18/2023
#1
让我回答我自己的问题,在阅读了互联网上的一些链接并尝试了几个配置之后,我能够成功地在 Docker 环境上运行的 Java 17 spring boot 应用程序上启用远程 JVM 调试。
您需要在 docker-compose.yml 中的环境配置下添加以下 env 变量:
JAVA_OPTS: "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:4003"
同时,如果 docker-compose.yml 文件中存在任何旧的 Java 8 环境变量,则需要注释掉它们:
#JVM_ARGS: *jvmflags
#CATALINA_OPTS_EXTRA: *jvmflags
这里是 Java 17 远程 JVM 调试配置详细信息的官方 IntellijIdea 链接,供您参考!享受!😉 😊
评论