调试容器化应用

容器工具扩展为容器内的应用程序调试提供了更多支持,例如脚手架launch.json用于将调试器附加到容器内运行的应用程序的配置。

容器工具扩展提供了Docker调试配置提供者,管理 VS Code 如何启动应用程序和/或将调试器附加到运行容器中的应用程序。该提供者通过以下条目配置launch.json配置针对提供者支持的每个应用平台进行特定配置。

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

要求

将发射配置搭建或粘贴到launch.json不足以构建和调试容器。要成功运行容器启动配置,您必须具备:

  • 一个Dockerfile。
  • docker-build以及docker-run任务tasks.json.
  • 一个启动配置,调用这些任务。

如果这些资源还不存在,我们建议使用容器:将Docker 文件添加到工作区......命令来创建这些项目。如果你已经有一个功能正常的 Dockerfile,我们建议使用 Containers: Initialize for container debugg 命令来构建启动配置和容器相关任务。

Node.js

关于在容器中调试Node.js应用程序的更多信息,请参阅“容器中的调试”Node.js

示例launch.json调试Node.js应用程序的配置:

{
  "configurations": [
    {
      "name": "Containers: Node.js Launch",
      "type": "docker",
      "request": "launch",
      "preLaunchTask": "docker-run: debug",
      "platform": "node"
    }
  ]
}

Python

关于在容器中调试 Python 应用的更多信息,请参见“Debug Python in a container”。

示例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"
      }
    }
  ]
}

配置参考

财产 描述
容器名称 用于调试的容器名称。
dockerServerReadyAction 启动浏览器到容器的选项。类似于 serverReadyAction,但用主机端口替代了容器端口。
removeContainerAfterDebug 调试后是否应该移除调试容器。
平台 应用的目标平台。可以是网核节点.
网核 在容器中调试 .NET 项目的选项。
节点 在容器中调试Node.js项目的选项。
派森 在容器中调试 Python 项目的选项。

dockerServerReadyAction object properties

财产 描述
行动 当发现模式时应采取的行动。可以是debugWithChromeopenExternally.
容器名称 集装箱名称与主机端口相匹配。
图案 调试控制台输出中需要关注的正则表达式模式。
uri格式 URI格式将启动。
web根 网页从根文件夹提供。仅在行动设置为debugWithChrome.

节点对象属性

这些属性与 VS Code 文档中描述的用于将调试器附加到Node.js应用程序时相同。所有通过的性质节点对象会传递给Node.js调试适配器,即使下面没有具体列出。

财产 描述 默认
港口 可选。调试端口。 9229
地址 可选。调试端口的TCP/IP地址。
资料来源地图 可选。通过将此设置为启用源映射确实如此.
outFiles 可选。用于定位生成JavaScript文件的glob图案数组。
autoAttachChildProcesses 可选。跟踪调试程序的所有子进程,并自动关联到在调试模式下启动的子进程。
暂停 可选。重启会话时,在这毫秒数后放弃。
停止进入 可选。程序启动时立即断开。
localRoot(本地根) 可选。VS Code 的根目录。 根工作区文件夹。
远程根 可选。Node 在容器内的根目录。 /usr/src/app
smartStep 可选。试着自动跨越那些不映射到源文件的代码。
skip文件 可选。自动跳过被这些团块图案覆盖的文件。
追踪 可选。启用诊断输出。

Python 对象属性

财产 描述 默认
主持人 远程调试的主机。
港口 远程调试的移植版。 5678
路径地图 绘制本地机器与远程主机之间的项目路径。
项目类型 你的Python项目类型,烧瓶对于Flask项目,姜戈对于Django,FastAPI适用于FastAPI,以及其他通用版本。项目类型将用于设置端口和调试所需的命令。
justMyCode 只调试用户编写的代码。
姜戈 Django 调试。 错误
金子 Jinja 模板调试(例如 Flask)。 错误

netCore 对象属性

通过的财产网核对象通常传递给 .NET 调试适配器,即使下面没有具体列出。调试器属性的完整列表见 OmniSharp VS Code 扩展文档

财产 描述
app项目 .NET 项目(.csproj、.fsproj 等)用于调试。

下一步

继续阅读,了解更多: