偵錯容器化應用程式
Docker 擴充功能提供更多對 Docker 容器內應用程式進行偵錯的支援,例如為將偵錯工具附加至容器內執行的應用程式,搭建 launch.json
組態。
Docker 擴充功能提供 docker
偵錯組態提供者,其管理 VS Code 如何啟動應用程式,以及/或將偵錯工具附加至執行中的 Docker 容器中的應用程式。此提供者透過 launch.json
內的項目進行組態,組態會因提供者支援的每個應用程式平台而異。
Docker 擴充功能目前支援在 Docker 容器內偵錯 Node.js、Python 和 .NET 應用程式。
需求
將啟動組態搭建或貼到 launch.json
中不足以組建和偵錯 Docker 容器。若要成功執行 Docker 啟動組態,您必須具備
- Dockerfile。
tasks.json
中的docker-build
和docker-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 |
應用程式的目標平台。可以是 netCore 或 node 。 |
netCore |
用於在 Docker 中偵錯 .NET 專案的選項。 |
node |
用於在 Docker 中偵錯 Node.js 專案的選項。 |
python |
用於在 Docker 中偵錯 Python 專案的選項。 |
dockerServerReadyAction 物件屬性
屬性 | 描述 |
---|---|
action |
在找到模式時要採取的動作。可以是 debugWithChrome 或 openExternally 。 |
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 等)。 |
後續步驟
繼續閱讀以深入瞭解