运行“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"

提问人:Santosh Jagtap 提问时间:8/4/2023 最后编辑:Santosh Jagtap 更新时间:8/18/2023 访问量:105

问:

从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”

Linux docker 远程调试 java-17

评论

0赞 Jens 8/4/2023
Mabe stackoverflow.com/a/60090750/3636601 提供帮助
0赞 Santosh Jagtap 8/18/2023
@Jens,感谢您的回复。但是,这些配置在我的情况下不起作用。我们需要将其指定为JAVA_OPTS:“-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:4003”。在此,我给出了详细的答案!

答:

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 链接,供您参考!享受!😉 😊