除錯容器化應用
Container Tools 擴充套件為在容器內除錯應用程式提供了更多支援,例如為將偵錯程式附加到在容器中執行的應用程式生成 launch.json 配置。
Container Tools 擴充套件提供了一個 docker 除錯配置提供程式,該程式管理 VS Code 如何啟動應用程式和/或將偵錯程式附加到正在執行的容器中的應用程式。此提供程式透過 launch.json 中的條目進行配置,配置特定於提供程式支援的每個應用程式平臺。
Container Tools 擴充套件目前支援在容器內除錯 Node.js、Python 和 .NET 應用程式。
要求
生成或貼上啟動配置到 launch.json不足以構建和除錯容器。要成功執行容器啟動配置,您必須擁有
- Dockerfile。
tasks.json中的docker-build和docker-run任務。- 呼叫這些任務的啟動配置。
我們建議使用Containers: Add Docker Files to Workspace... 命令來建立這些項,如果這些資產尚不存在。如果您已經有一個功能性的 Dockerfile,我們建議使用Containers: Initialize for container debugging 命令來生成啟動配置和與容器相關的任務。
Node.js
有關在容器內除錯 Node.js 應用程式的更多資訊,請參閱 在容器內除錯 Node.js。
用於除錯 Node.js 應用程式的示例 launch.json 配置
{
"configurations": [
{
"name": "Containers: Node.js Launch",
"type": "docker",
"request": "launch",
"preLaunchTask": "docker-run: debug",
"platform": "node"
}
]
}
Python
有關在容器內除錯 Python 應用程式的更多資訊,請參閱 在容器內除錯 Python。
用於除錯 Python 應用程式的示例 launch.json 配置
{
"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 publish命令構建映象。 -
使用 Dockerfile:如果您希望使用
Dockerfile自定義您的專案,請選擇此選項。
有關這兩種選項的更多詳細資訊,請參閱 在容器內除錯 .NET。
使用 Dockerfile 除錯 .NET 應用程式的示例 launch.json 配置
{
"version": "0.2.0",
"configurations": [
{
"name": "Containers: .NET Launch",
"type": "docker",
"request": "launch",
"preLaunchTask": "Run Container",
"netCore": {
"appProject": "${workspaceFolder}/project.csproj"
}
}
]
}
配置參考
| 屬性 | 描述 |
|---|---|
containerName |
用於除錯的容器名稱。 |
dockerServerReadyAction |
將瀏覽器啟動到容器的選項。類似於 serverReadyAction,但用主機埠替換容器埠。 |
removeContainerAfterDebug |
除錯後是否刪除除錯容器。 |
platform |
應用程式的目標平臺。可以是 netCore 或 node。 |
netCore |
在容器中除錯 .NET 專案的選項。 |
node |
在容器中除錯 Node.js 專案的選項。 |
python |
在容器中除錯 Python 專案的選項。 |
dockerServerReadyAction 物件屬性
| 屬性 | 描述 |
|---|---|
action |
找到模式時要執行的操作。可以是 debugWithChrome 或 openExternally。 |
containerName |
要匹配主機埠的容器名稱。 |
pattern |
要在除錯控制檯輸出中查詢的正則表示式模式。 |
uriFormat |
要啟動的 URI 格式。 |
webRoot |
提供網頁的根資料夾。僅當 action 設定為 debugWithChrome 時使用。 |
node 物件屬性
這些屬性與 VS Code 文件中關於將偵錯程式附加到 Node.js 應用程式的 描述相同。傳遞到
node物件的所有屬性都將傳遞給 Node.js 除錯介面卡,即使未在此處單獨列出。
| 屬性 | 描述 | 預設值 |
|---|---|---|
port |
可選。要使用的除錯埠。 | 9229 |
address |
可選。除錯埠的 TCP/IP 地址。 | |
sourceMaps |
可選。透過將其設定為 true 來啟用源對映。 |
|
outFiles |
可選。用於定位生成的 JavaScript 檔案的 glob 模式陣列。 | |
autoAttachChildProcesses |
可選。跟蹤除錯目標的全部子程序,並自動附加到以除錯模式啟動的子程序。 | |
timeout |
可選。重啟會話時,在此毫秒數後放棄。 | |
stopOnEntry |
可選。程式啟動時立即中斷。 | |
localRoot |
可選。VS Code 的根目錄。 | 根工作區資料夾。 |
remoteRoot |
可選。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 等)。 |
後續步驟
繼續閱讀以瞭解更多資訊