调试容器化应用程序

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

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

Docker 扩展当前支持在 Docker 容器中调试Node.jsPython.NET应用程序。

要求

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

  • 一个 Dockerfile。
  • docker-builddocker-run任务tasks.json
  • 调用这些任务的启动配置。

如果这些资产都不存在,我们建议使用Docker:将 Docker 文件添加到工作区...命令来创建这些项目。如果您已经有一个可用的 Dockerfile,我们建议使用Docker:初始化 Docker 调试命令来构建启动配置和 Docker 相关任务。

Node.js

有关在 Docker 容器内调试 Node.js 应用程序的更多信息,请参阅在容器内调试 Node.js

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

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

Python

有关在 Docker 容器中调试 Python 应用程序的更多信息,请参阅在容器内调试 Python

launch.json用于调试 Python 应用程序的示例配置:

{
  "configurations": [
    {
      "name": "Docker: Python - Django",
      "type": "docker",
      "request": "launch",
      "preLaunchTask": "docker-run: debug",
      "python": {
        "pathMappings": [
          {
            "localRoot": "${workspaceFolder}",
            "remoteRoot": "/app"
          }
        ],
        "projectType": "django"
      }
    }
  ]
}

。网

您可以选择两种在 Docker 容器中构建和调试项目的方法:

  • 使用 .NET SDK:如果您熟悉MSBuild或想要在没有 Dockerfile 的情况下容器化您的项目,这是推荐的选择。

    注意:此选项仅适用于 .NET SDK 7 及更高版本,并使用dotnet publish命令来构建映像。

  • 使用 Dockerfile:如果您更喜欢使用 Dockerfile 自定义项目Dockerfile,请选择此选项。

有关这两个选项的更多详细信息,请参阅在 Docker 容器中调试 .NET

launch.json使用以下命令调试 .NET 应用程序的示例配置Dockerfile

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Launch .NET Core in Docker",
      "type": "docker",
      "request": "launch",
      "preLaunchTask": "Run Docker Container",
      "netCore": {
        "appProject": "${workspaceFolder}/project.csproj"
      }
    }
  ]
}

配置参考

财产 描述
containerName 用于调试的容器的名称。
dockerServerReadyAction 用于将浏览器启动到 Docker 容器的选项。与 serverReadyAction 类似,但用主机端口替换容器端口。
removeContainerAfterDebug 调试后是否移除调试容器。
platform 应用程序的目标平台。可以是netCorenode.
netCore 用于在 Docker 中调试 .NET 项目的选项。
node 用于在 Docker 中调试 Node.js 项目的选项。
python 用于在 Docker 中调试 Python 项目的选项。

dockerServerReadyAction 对象属性

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

节点对象属性

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

财产 描述 默认
port 选修的。要使用的调试端口。 9229
address 选修的。调试端口的 TCP/IP 地址。
sourceMaps 选修的。通过将其设置为 来启用源映射true
outFiles 选修的。用于定位生成的 JavaScript 文件的 glob 模式数组。
autoAttachChildProcesses 选修的。跟踪调试对象的所有子进程并自动附加到在调试模式下启动的子进程。
timeout 选修的。重新启动会话时,请在此毫秒数后放弃。
stopOnEntry 选修的。程序启动时立即中断。
localRoot 选修的。VS Code 的根目录。 根工作区文件夹。
remoteRoot 选修的。Docker 容器内 Node 的根目录。 /usr/src/app
smartStep 选修的。尝试自动跳过未映射到源文件的代码。
skipFiles 选修的。自动跳过这些 glob 模式覆盖的文件。
trace 选修的。启用诊断输出。

python 对象属性

财产 描述 默认
host 用于远程调试的主机。
port 用于远程调试的端口。 5678
pathMappings 映射本地计算机和远程主机之间的项目路径。
projectType Python 项目的类型,flask对于 Flask 项目、djangoDjango、fastapiFastAPI 以及其他项目的常规类型。项目类型将用于设置用于调试的端口和命令。
justMyCode 仅调试用户编写的代码。
django Django 调试。 false
jinja Jinja模板调试(例如Flask)。 false

netCore 对象属性

即使下面没有特别列出,对象中传递的属性netCore通常也会传递到 .NET 调试适配器。调试器属性的完整列表位于OmniSharp VS Code 扩展文档中。

财产 描述
appProject 要调试的 .NET 项目(.csproj、.fsproj 等)。

下一步

继续阅读以了解更多信息: