【问题标题】:Intellij Debug Docker container keeps giving me IO Exception Handshake FailedIntellij Debug Docker 容器不断给我 IO Exception Handshake Failed
【发布时间】:2020-11-06 15:23:12
【问题描述】:

我正在尝试在 Intellij v2020.1 中设置远程调试器,我不断收到以下错误:

无法打开调试器端口 (localhost:5005): java.io.IOException "handshake failed - connection prematurally closed"

在我的 docker compose 文件中,我已将端口 5005 安装到 5005

在我的 docker 文件中,我有:

EXPOSE 5005

ENTRYPOINT ["/bin/bash", "runme.sh"]

在我的 shell 脚本中,我有:

/opt/java/openjdk/bin/java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar mine.jar

当我执行 docker ps 时,我可以看到以下内容:

0.0.0.0:5005->5005/tcp, 0.0.0.0:8111->8111/tcp

在 IntelliJ 中,我将远程调试器从端口 5005 设置到容器端口 5005,添加到模块 claspath 和启动前步骤中,添加到我的撰写文件中。

服务启动正常,但无法连接到调试器,有什么想法吗?

【问题讨论】:

  • jdb -attach 5005 工作吗?
  • 我应该把它放在哪里?
  • jdb 是 JDK 提供的命令行调试器,您可以在主机系统的终端中运行此命令。另见tutorialspoint.com/jdb/jdb_quick_guide.htm。这将有助于了解该问题是否与 IntelliJ IDEA 有关。如果jdb 也失败了,那么问题在于主机和 Docker 之间的一些网络配置。另外,你在 Docker 中使用什么 Java 版本?如果是 Java 9+,启用调试的命令行应如下所示:-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005,以便它绑定到所有接口。
  • 感谢您的回复,在主机系统上尝试了这个,也得到了同样的错误,所以它不是 IntelliJ 问题。我正在使用 Jdk8
  • 也在youtrack.jetbrains.com/issue/IDEA-173607 跟踪,目前没有找到解决方案。

标签: java docker debugging docker-compose jdb


【解决方案1】:

将这一行放在我的 Dockerfile 中为我解决了这个问题:

ENV JAVA_TOOL_OPTIONS -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005

这里的关键部分是“address=*:5005”,而不是只是“address=5005”。显然,由于 Java 9 需要 *: 在端口之前进行一些安全更改。

编辑:我看到您使用的是 Java 8。但也许将 -XDebug 添加到选项中也可以解决问题:

ENV JAVA_TOOL_OPTIONS -Xdebug -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005

【讨论】:

  • -Xdebug 适用于
  • 这是我的第一个想法。从 jdb 和 IDEA 都不起作用 - 握手失败 - 连接过早关闭
猜你喜欢
  • 1970-01-01
  • 2020-03-02
  • 2016-09-02
  • 1970-01-01
  • 1970-01-01
  • 2021-07-22
  • 2017-12-07
  • 2021-06-24
  • 2023-02-11
相关资源
最近更新 更多