调试容器化应用
Container Tools 扩展为在容器内调试应用程序提供了更多支持,例如为将调试器附加到容器内运行的应用程序配置 launch.json。
Container Tools 扩展提供了一个 docker 调试配置提供程序,该程序管理 VS Code 如何启动应用程序和/或将调试器附加到正在运行的容器中的应用程序。此提供程序通过 launch.json 中的条目进行配置,配置特定于提供程序支持的每个应用程序平台。
Container Tools 扩展目前支持在容器内调试 Node.js、Python 和 .NET 应用程序。
要求
在 launch.json 中生成或粘贴启动配置 **不足以** 构建和调试容器。要成功运行容器启动配置,您必须拥有
- Dockerfile。
tasks.json中的docker-build和docker-run任务。- 调用这些任务的启动配置。
我们建议使用 **Containers: Add Docker Files to Workspace...** 命令来创建这些项(如果这些资产尚不存在)。如果您已有可用的 Dockerfile,我们建议使用 **Containers: Initialize for container debugging** 命令来生成启动配置和与容器相关的任务。
Node.js
有关在容器内调试 Node.js 应用程序的更多信息,请参阅 在容器内调试 Node.js。
用于调试 Node.js 应用程序的示例 launch.json 配置
{
"configurations": [
{
"name": "Containers: Node.js Launch",
"type": "docker",
"request": "launch",
"preLaunchTask": "docker-run: debug",
"platform": "node"
}
]
}
Python
有关在容器内调试 Python 应用程序的更多信息,请参阅 在容器内调试 Python。
用于调试 Python 应用程序的示例 launch.json 配置
{
"configurations": [
{
"name": "Containers: Python - Django",
"type": "docker",
"request": "launch",
"preLaunchTask": "docker-run: debug",
"python": {
"pathMappings": [
{
"localRoot": "${workspaceFolder}",
"remoteRoot": "/app"
}
],
"projectType": "django"
}
}
]
}
.NET
您可以在容器内选择两种构建和调试项目的方式
-
使用 .NET SDK:如果您熟悉
MSBuild或希望在没有 Dockerfile 的情况下容器化您的项目,这是推荐的选择。注意:此选项仅适用于 .NET SDK 7 及更高版本,并使用
dotnet publish命令来构建映像。 -
使用 Dockerfile:如果您希望通过
Dockerfile自定义您的项目,请选择此选项。
有关这两种选择的更多详细信息,请参阅 在容器内调试 .NET。
使用 Dockerfile 调试 .NET 应用程序的示例 launch.json 配置
{
"version": "0.2.0",
"configurations": [
{
"name": "Containers: .NET Launch",
"type": "docker",
"request": "launch",
"preLaunchTask": "Run Container",
"netCore": {
"appProject": "${workspaceFolder}/project.csproj"
}
}
]
}
配置参考
| 属性 | 描述 |
|---|---|
containerName |
用于调试的容器名称。 |
dockerServerReadyAction |
将浏览器启动到容器的选项。类似于 serverReadyAction,但用主机端口替换容器端口。 |
removeContainerAfterDebug |
调试后是否删除调试容器。 |
platform |
应用程序的目标平台。可以是 netCore 或 node。 |
netCore |
在容器中调试 .NET 项目的选项。 |
node |
在容器中调试 Node.js 项目的选项。 |
python |
在容器中调试 Python 项目的选项。 |
dockerServerReadyAction 对象属性
| 属性 | 描述 |
|---|---|
action |
找到模式时要执行的操作。可以是 debugWithChrome 或 openExternally。 |
containerName |
匹配主机端口的容器名称。 |
pattern |
要在调试控制台输出中查找的正则表达式模式。 |
uriFormat |
要启动的 URI 格式。 |
webRoot |
Web 页面服务的根文件夹。仅在 action 设置为 debugWithChrome 时使用。 |
node 对象属性
这些属性与 VS Code 文档中描述的将调试器附加到 Node.js 应用程序的属性相同。传递到
node对象的所有属性都将传递给 Node.js 调试适配器,即使它们没有在此处单独列出。
| 属性 | 描述 | 默认值 |
|---|---|---|
port |
可选。要使用的调试端口。 | 9229 |
address |
可选。调试端口的 TCP/IP 地址。 | |
sourceMaps |
可选。通过将其设置为 true 来启用源映射。 |
|
outFiles |
可选。用于定位生成的 JavaScript 文件的 glob 模式数组。 | |
autoAttachChildProcesses |
可选。跟踪调试目标的所有子进程,并自动附加到以调试模式启动的进程。 | |
timeout |
可选。重新启动会话时,在此毫秒数后放弃。 | |
stopOnEntry |
可选。程序启动时立即中断。 | |
localRoot |
可选。VS Code 的根目录。 | 根工作区文件夹。 |
remoteRoot |
可选。容器内的 Node.js 根目录。 | /usr/src/app |
smartStep |
可选。尝试自动跳过与源文件不匹配的代码。 | |
skipFiles |
可选。自动跳过这些 glob 模式涵盖的文件。 | |
trace |
可选。启用诊断输出。 |
python 对象属性
| 属性 | 描述 | 默认值 |
|---|---|---|
host |
远程调试的主机。 | |
port |
远程调试的端口。 | 5678 |
pathMappings |
映射本地计算机和远程主机之间的项目路径。 | |
projectType |
您的 Python 项目类型,Flask 项目为 flask,Django 项目为 django,FastAPI 项目为 fastapi,其他通用项目为 general。项目类型将用于设置调试所用的端口和命令。 |
|
justMyCode |
仅调试用户编写的代码。 | |
django |
Django 调试。 | false |
jinja |
Jinja 模板调试(例如 Flask)。 | false |
netCore 对象属性
传递到
netCore对象中的属性通常会传递到 .NET 调试适配器,即使它们未在此处单独列出。调试器属性的完整列表可在 OmniSharp VS Code 扩展文档中找到。
| 属性 | 描述 |
|---|---|
appProject |
.NET 项目(.csproj、.fsproj 等)需要调试。 |
后续步骤
继续阅读以了解更多信息