win*_*rrr 5 docker visual-studio-code
我有一个.tar
安装到容器的 Java 应用程序 ( )。容器entrypoint
的 启动该应用程序。
Dockerfile
(后端文件夹作为卷安装到映像中)
FROM openjdk:11.0.7
ENTRYPOINT /backend/entrypoint.sh
Run Code Online (Sandbox Code Playgroud)
entrypoint.sh
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 -Xmx2048M -jar backend.jar
Run Code Online (Sandbox Code Playgroud)
现在我想使用 VSCode 的调试器来调试正在运行的应用程序。根据 VSCode 官方文档(博客:检查容器),这可以使用命令面板和命令轻松完成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,但在另一个地方(远程:在容器中调试)他们清楚地谈论了 Java 应用程序:
例如,将其添加到 .devcontainer/devcontainer.json 将设置 Java 主路径: "settings": { "java.home": "/docker-java-home" }
小智 7
我有一个 Spring Boot 应用程序在openjdk:11-jre-slim容器中运行,并且能够使用以下配置成功调试它。
首先,在运行容器时设置 jvm args。您可以通过 Entrypoint.sh 执行此操作,但我决定覆盖 docker-compose 中的容器入口点。我还公开了调试端口。
ports:
- 5005:5005
entrypoint: ["java","-agentlib:jdwp=transport=dt_socket,address=*:5005,server=y,suspend=n","-jar","app.jar"]
Run Code Online (Sandbox Code Playgroud)
然后将此配置添加到 vscode 中的 launch.json 中:
{
"type": "java",
"name": "Debug (Attach)",
"projectName": "MyProjectName",
"request": "attach",
"hostName": "127.0.0.1",
"port": 5005
}
Run Code Online (Sandbox Code Playgroud)
现在,您可以启动容器并在 VScode 中的“运行和调试”下选择“调试(附加)”。这将开始带有断点、变量等的典型调试会话......
如果你像这样设置你的运行命令
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000 -jar App.jar
Run Code Online (Sandbox Code Playgroud)
(或者不管你怎么称呼它,重要的是选项)
然后让您的 docker 容器公开该端口。我通常使用 docker compose 文件来执行此操作,因此您可以在运行时轻松映射端口
归档时间: |
|
查看次数: |
5230 次 |
最近记录: |