调试容器化应用

Container Tools 扩展提供了对在容器内调试应用更多的支持,例如为将调试器附加到容器内运行的应用搭建 launch.json 配置脚手架。

Container Tools 扩展提供了一个 docker 调试配置提供程序,用于管理 VS Code 如何启动应用以及/或者将调试器附加到正在运行的容器中的应用。此提供程序通过 launch.json 中的条目进行配置,每个配置特定于该提供程序支持的每个应用平台。

Container Tools 扩展目前支持在容器内调试 Node.jsPython.NET 应用。

要求

仅在 launch.json 中生成脚手架或粘贴启动配置来构建和调试容器是不够的。要成功运行容器启动配置,您必须具备:

  • 一个 Dockerfile。
  • tasks.json 中的 docker-builddocker-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 应用的目标平台。可以是 netCorenode
netCore 在容器中调试 .NET 项目的选项。
node 在容器中调试 Node.js 项目的选项。
python 在容器中调试 Python 项目的选项。

dockerServerReadyAction 对象属性

属性 描述
action 找到匹配模式时要采取的操作。可以是 debugWithChromeopenExternally
containerName 与主机端口匹配的容器名称。
pattern 要在调试控制台输出中查找的正则表达式模式。
uriFormat 要启动的 URI 格式。
webRoot 提供网页服务的根文件夹。仅当 action 设置为 debugWithChrome 时使用。

node 对象属性

这些属性与将调试器附加到 Node.js 应用的 VS Code 文档 中描述的属性相同。在 node 对象中传递的所有属性都将传递给 Node.js 调试适配器,即使未在下方专门列出。

属性 描述 默认值
port 可选。要使用的调试端口。 9229
address 可选。调试端口的 TCP/IP 地址。
sourceMaps 可选。通过将此项设置为 true 来启用源映射。
outFiles 可选。用于定位生成的 JavaScript 文件的 glob 模式数组。
autoAttachChildProcesses 可选。跟踪被调试对象的所有子进程,并自动附加到在调试模式下启动的子进程。
timeout 可选。重启会话时,在此毫秒数后放弃。
stopOnEntry 可选。程序启动时立即中断。
localRoot 可选。VS Code 的根目录。 工作区根文件夹。
remoteRoot 可选。容器内 Node 的根目录。 /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 等)。

下一步计划

继续阅读以了解更多关于

English 한국어 中文(简体) 中文(繁體)
© . This website operates independently and is not affiliated with or endorsed by Microsoft. All brand names, logos, and trademarks are the property of their respective owners.