【问题标题】:How to debug a Java application running inside a Docker container using VSCode's Java debugger如何使用 VSCode 的 Java 调试器调试在 Docker 容器中运行的 Java 应用程序
【发布时间】:2021-02-04 08:10:13
【问题描述】:

我有一个 Java 应用程序 (.tar) 已安装到容器中。容器的entrypoint 启动该应用程序。

Dockerfile(后端文件夹作为卷挂载到镜像中)

FROM openjdk:11.0.7

ENTRYPOINT /backend/entrypoint.sh

entrypoint.sh

java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 -Xmx2048M -jar backend.jar

现在我想使用 VSCode 的调试器来调试正在运行的应用程序。根据官方 VSCode 文档 (blog: inspecting containers),这可以通过命令面板和命令 Debugger: attach to Node.js process 轻松完成。

但在他们的示例中,他们使用的是 Node.js 服务器。但是,在我的容器中,没有可以将调试器附加到的 Node.js 进程,并且我找不到适用于 Java Spring 应用程序的命令。 那么如何将 VSCode 的 Java 调试器附加到已经在 Docker 容器中运行的 Java 应用程序?

在他们的文档 (containers: debug common) 的另一个地方,他们声明如下:

Docker 扩展目前支持在 Docker 容器中调试 Node.js、Python 和 .NET Core 应用程序。

所以那里没有提到 Java,但在另一个地方 (remote: debugging in a container) 他们清楚地谈论了 Java 应用程序:

例如,将其添加到 .devcontainer/devcontainer.json 将设置 Java 主路径: “设置”:{“java.home”:“/docker-java-home”}

【问题讨论】:

  • 将tar文件复制到容器中,然后使用启动脚本解压
  • @Ashok 这如何帮助我调试应用程序?
  • 基本上,你的要求是你想在你的容器中执行java?

标签: docker visual-studio-code


【解决方案1】:

如果你像这样设置你的运行命令

java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000 -jar App.jar 

(或者你喜欢怎么称呼它,重要的是选项)

然后让你的 docker 容器暴露那个端口。我通常使用 docker compose 文件来执行此操作,因此您可以在运行时轻松映射端口

【讨论】:

  • 是的,这正是我的设置(我更新了我的问题)。但是我如何才能将 VSCode Java 调试器附加到该 JVM?
  • 哦,好的,有支持附加的扩展“debugger for java”。
  • 我该怎么做?
  • 左键点击插件工具栏(看起来像拼图)然后搜索。
猜你喜欢
  • 2019-04-02
  • 2020-03-03
  • 2017-12-18
  • 1970-01-01
  • 2020-08-10
  • 2022-07-07
  • 1970-01-01
  • 2021-02-09
  • 2017-10-21
相关资源
最近更新 更多