🚀 在 VS Code 中取得

偵錯容器化應用程式

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 要在偵錯主控台輸出中尋找的 regex 模式。
uriFormat 要啟動的 URI 格式。
webRoot 從中提供網頁的根資料夾。僅在 action 設定為 debugWithChrome 時使用。

node 物件屬性

這些屬性與 VS Code 文件中描述的用於將偵錯工具附加至 Node.js 應用程式的屬性相同。在 node 物件中傳遞的所有屬性都將傳遞至 Node.js 偵錯配接器,即使未在下方特別列出。

屬性 描述 預設值
port 選用。要使用的偵錯連接埠。 9229
address 選用。偵錯連接埠的 TCP/IP 位址。
sourceMaps 選用。將此設定為 true 以啟用原始碼對應。
outFiles 選用。用於尋找產生的 JavaScript 檔案的 glob 模式陣列。
autoAttachChildProcesses 選用。追蹤 debuggee 的所有子程序,並自動附加至在偵錯模式中啟動的子程序。
timeout 選用。重新啟動工作階段時,在此毫秒數後放棄。
stopOnEntry 選用。在程式啟動時立即中斷。
localRoot 選用。VS Code 的根目錄。 根工作區資料夾。
remoteRoot 選用。Docker 容器內 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 等)。

後續步驟

繼續閱讀以深入瞭解