现已发布!阅读 10 月份的新功能和修复。

调试容器化应用程序

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

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

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

需求

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

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

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

Node.js

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

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

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

Python

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

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

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

.NET

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

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

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

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

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

用于调试使用 Dockerfile 的 .NET 应用程序的 launch.json 配置示例

{
  "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 时使用。

node 对象属性

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

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

python 对象属性

属性 描述 默认
host 远程调试的主机。
port 远程调试的端口。 5678
pathMappings 映射本地机器和远程主机之间的项目路径。
projectType Python 项目的类型,flask 表示 Flask 项目,django 表示 Django 项目,fastapi 表示 FastAPI 项目,以及其他类型的项目。项目类型将用于设置调试使用的端口和命令。
justMyCode 仅调试用户编写的代码。
django Django 调试。 false
jinja Jinja 模板调试(例如 Flask)。 false

netCore 对象属性

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

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

后续步骤

继续阅读以了解有关以下内容的更多信息