java - Intellij Debug Docker 容器不断给我 IO Exception Handshake Failed
问题描述
我正在尝试在 Intellij v2020.1 中设置远程调试器,我不断收到以下错误:
无法打开调试器端口(localhost:5005):java.io.IOException“握手失败 - 连接提前关闭”
在我的 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 和启动前的步骤中,添加到我的撰写文件中。
该服务启动正常,但无法连接到调试器,有什么想法吗?
解决方案
将此行放在我的 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
推荐阅读
- ios - 未调用 cellForRowAt 索引路径函数
- sms - 从 .backup 文件中恢复 SMS 消息
- apache-flink - Flink SQL - 如何使用自定义模式解析 TIMESTAMP?
- r - 用 igraph 在 R 中绘制大型二部图
- python - tkinter 获取 int 值而不是 nonetype
- angular - Angular 6 更新后, ng build --prod 产生“错误:应找到 ngsw-config.json 配置文件”
- javascript - 如何在使用 CSRF 令牌缓存请求时减少服务工作者缓存大小
- node.js - 无法安装 npm 包节点 v5+
- c++ - 将光标位置存储在类对象中(ncurses c++)
- java - Javafx 将特定节点移动到 AnchorPane 的前面