调试容器化应用
Container Tools 扩展为在容器内调试应用程序提供了更多的支持,例如脚手架launch.json在容器内附加调试器的配置。
容器工具扩展提供了一个Docker调试配置提供程序管理 VS Code 如何在运行的容器中启动应用程序和/或附加调试器到应用程序。此提供程序通过以下条目进行配置launch.json,配置特定于每个由提供商支持的应用程序平台。
容器工具扩展目前支持在容器内调试Node.js、Python和.NET应用程序。
要求
脚手架或粘贴启动配置到launch.json 不是 足够的 来构建和调试一个容器。要成功运行容器启动配置,您必须拥有:
- 一个Dockerfile。
Docker 构建和docker运行任务在任务.json输入:.- 一个调用这些任务的启动配置。
我们建议使用容器:将Docker文件添加到工作区...命令来创建这些项目,如果这些资产不存在的话。如果你已经有一个功能正常的Dockerfile,我们建议使用容器:初始化用于容器调试命令来生成一个启动配置和与容器相关的任务。
Node.js
有关在容器内调试 Node.js 应用程序的更多信息,请参见 在容器内调试 Node.js.
示例launch.json调试Node.js应用程序的配置:
{
"配置": [
{
"名称": "容器: Node.js 启动",
"类型": "docker",
"请求": "启动",
"预启动任务": "docker-run: 调试",
"平台": "node"
}
]
}
Python
关于在容器内调试Python应用程序的更多信息,请参见 在容器内调试Python.
示例launch.json调试Python应用程序的配置:
{
"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 发布用于构建镜像的命令。 -
使用Dockerfile:如果您喜欢通过自定义项目来使用
Dockerfile选择此选项。
有关这两个选项的更多详细信息,请参阅在容器内调试 .NET。
示例launch.json使用 配置用于调试 .NET 应用程序Dockerfile输入:
{
"version": "0.2.0",
"configurations": [
{
"name": "Containers: .NET Launch",
"type": "docker",
"request": "launch",
"preLaunchTask": "Run Container",
"netCore": {
"appProject": "${workspaceFolder}/project.csproj"
}
}
]
}
配置参考
| 财产 | 描述 |
|---|---|
容器名称 |
用于调试的容器名称。 |
docker服务器就绪动作 |
启动浏览器到容器的选项。类似于serverReadyAction,但将容器端口替换为主机端口。 |
调试后移除容器 |
是否在调试后删除调试容器。 |
平台 |
应用程序的目标平台。可以是网核或节点输入:. |
网核 |
在容器中调试 .NET 项目的选项。 |
节点 |
在容器中调试 Node.js 项目的选项。 |
Python |
在容器中调试Python项目的选项。 |
dockerServerReadyAction 对象属性
| 财产 | 描述 |
|---|---|
行动 |
当找到模式时应采取的行动。可以是使用Chrome调试或打开外部输入:. |
容器名称 |
匹配主机端口的容器名称。 |
图案 |
在调试控制台输出中查找的正则表达式模式。 |
uri格式 |
启动的URI格式。 |
网页根目录 |
网页服务于的根文件夹。仅在 时使用行动设置为使用Chrome调试输入:. |
节点对象属性
这些属性与VS Code文档中描述的相同,用于附加调试器到Node.js应用程序。所有传递的属性在
节点对象将传递给Node.js调试适配器,即使在下面没有明确列出。
| 财产 | 描述 | 默认 |
|---|---|---|
端口 |
可选。要使用的调试端口。 | 9229 |
地址 |
可选。调试端口的TCP/IP地址。 | |
源映射 |
可选。通过将此设置为启用源映射真输入:. |
|
输出文件 |
可选。用于定位生成的JavaScript文件的全局模式数组。 | |
自动附加子进程 |
可选。跟踪调试程序的所有子进程,并自动附加到以调试模式启动的那些子进程。 | |
超时 |
可选。重新启动会话时,毫秒数后放弃。 | |
停止进入 |
可选。程序启动时立即中断。 | |
本地根目录 |
可选。VS Code 的根目录。 | 根工作区文件夹。 |
远程根目录 |
可选。节点在容器内的根目录。 | /usr/src/app |
智能步态 |
可选。尝试自动跳过不映射到源文件的代码。 | |
跳过文件 |
可选。自动跳过符合这些 glob 模式的文件。 | |
追踪 |
可选。启用诊断输出。 |
Python 对象属性
| 财产 | 描述 | 默认 |
|---|---|---|
主机 |
远程调试的主机。 | |
端口 |
远程调试端口。 | 5678 |
路径映射 |
映射本地机器和远程主机之间的项目路径。 | |
项目类型 |
你的Python项目的类型,烧瓶对于Flask项目,django对于Django,快速API对于 FastAPI,以及其他的一般情况。项目类型将用于设置端口和用于调试的命令。 |
|
只是我的代码 |
仅调试用户编写的代码。 | |
django |
Django 调试。 | 假 |
Jinja |
Jinja 模板调试(如 Flask)。 | 假 |
netCore 对象属性
传递的属性
网核对象通常会传递给 .NET 调试适配器,即使在下面没有明确列出。调试器属性的完整列表在 OmniSharp VS Code 扩展文档中。
| 财产 | 描述 |
|---|---|
应用程序项目 |
要调试的 .NET 项目 (.csproj, .fsproj 等)。 |
下一步
继续阅读以了解更多关于: