附加到正在執行的容器
Visual Studio Code 可以為您建立和啟動容器,但這可能與您的工作流程不符,您可能更傾向於將 VS Code "附加" 到一個已執行的 Docker 容器 — 無論它是如何啟動的。附加後,您可以像使用 devcontainer.json 在容器中開啟資料夾一樣安裝擴充套件、編輯和除錯。
附加到 Docker 容器
要附加到 Docker 容器,請從命令面板(F1)中選擇“Dev Containers: Attach to Running Container...”(附加到正在執行的容器...),或者使用活動欄中的“Remote Explorer”(遠端資源管理器),然後在“Containers”(容器)檢視中,選擇您要連線的容器上的“Attach to Container”(附加到容器)內嵌操作。

注意: 當使用 Alpine Linux 容器時,某些擴充套件可能無法工作,因為擴充套件內部的原生代碼存在
glibc依賴項。
已附加容器的配置檔案
VS Code 支援針對映象或容器名稱級別的配置檔案,以加快重複連線到特定 Docker 容器時的設定速度。附加後,每當您開啟一個資料夾、安裝擴充套件或轉發埠時,都會自動更新一個本地特定於映象的配置檔案以記住您的設定,這樣當您再次附加時,一切都會回到原位。
-
預設情況下,將使用“映象級別”的配置。附加後,要檢視或更新它,請從命令面板(F1)中選擇“Dev Containers: Open Container Configuration File”(Dev Containers:開啟容器配置檔案)。
-
如果您希望將配置與“容器名稱”關聯,請在附加後從命令面板(F1)中選擇“Dev Containers: Open Named Configuration File”(Dev Containers:開啟命名配置檔案)。從這一點開始的任何更新將應用於此名稱級別的配置,而不是映象級別。
這兩個檔案都支援 `devcontainer.json` 屬性的子集
{
// Default path to open when attaching to a new container.
"workspaceFolder": "/path/to/code/in/container/here",
// Set *default* container specific settings.json values on container create.
"settings": {
"terminal.integrated.defaultProfile.linux": "bash"
},
// Add the IDs of extensions you want installed when the container is created.
"extensions": ["dbaeumer.vscode-eslint"],
// An array port numbers to forward
"forwardPorts": [8000],
// Container user VS Code should use when connecting
"remoteUser": "vscode",
// Set environment variables for VS Code and sub-processes
"remoteEnv": { "MY_VARIABLE": "some-value" }
}
請參閱已附加容器配置參考以獲取屬性及其用法的完整列表。
儲存後,當您第一次使用相同的映象/容器名稱開啟容器時,將使用這些屬性來配置環境。
提示: 如果您的配置有問題,您也可以在未附加到容器時進行編輯,方法是從命令面板(F1)中選擇“Dev Containers: Open Attached Container Configuration File...”(Dev Containers:開啟已附加容器配置檔案...),然後從出現的列表中選擇映象/容器名稱。
最後,如果您有希望無論附加到哪個容器都安裝的擴充套件,可以更新 `settings.json` 來指定一個始終安裝的擴充套件列表。
已附加容器配置參考
已附加容器的配置檔案類似於 devcontainer.json,並支援其屬性的子集。
| 屬性 | 型別 | 描述 |
|---|---|---|
workspaceFolder |
字串 | 設定 VS Code 連線到容器時應開啟的預設路徑(通常是原始碼在容器中找到的卷掛載的路徑)。預設未設定(將開啟一個空視窗)。 |
extensions |
陣列 | 一個擴充套件 ID 陣列,指定在建立容器時應安裝在容器內的擴充套件。預設為 `[]`。 |
settings |
物件 | 將預設的 `settings.json` 值新增到特定於容器/計算機的設定檔案中。 |
forwardPorts |
陣列 | 應從容器內部轉發到本地機器的埠列表。 |
portsAttributes |
物件 | 一個物件,將埠號、`"host:port"` 值、範圍或正則表示式對映到一組預設選項。有關可用選項,請參閱埠屬性。例如"portsAttributes": {"3000": {"label": "Application port"}} |
otherPortsAttributes |
物件 | 未透過 `portsAttributes` 配置的埠、埠範圍和主機的預設選項。有關可用選項,請參閱埠屬性。例如"otherPortsAttributes": {"onAutoForward": "silent"} |
remoteEnv |
物件 | 一組名稱-值對,用於設定或覆蓋 VS Code(或子程序,如終端)的環境變數,但不會影響整個容器。可以在值中引用環境變數和預定義變數。 例如:`"remoteEnv": { "PATH": "${containerEnv:PATH}:/some/other/path" }` |
remoteUser |
字串 | 覆蓋 VS Code 在容器中執行的使用者(包括終端、任務或除錯等子程序)。預設為容器整體執行的使用者(通常是 `root`)。 |
userEnvProbe |
enum | 指示用於“探測”使用者環境變數的 shell 型別,以便將其包含在 VS Code 或其他連線工具的程序中:`none`、`interactiveShell`、`loginShell` 或 `loginInteractiveShell`(預設)。使用的具體 shell 基於使用者的預設 shell(通常是 bash)。例如,bash 互動式 shell 通常會包含在 `/etc/bash.bashrc` 和 `~/.bashrc` 中設定的變數,而登入 shell 通常包含來自 `/etc/profile` 和 `~/.profile` 的變數。將此屬性設定為 `loginInteractiveShell` 將獲取所有四個檔案的變數。 |
postAttachCommand |
string, 陣列 |
在 VS Code 附加到容器後執行的命令字串或命令引數列表。在字串中使用 `&&` 執行多個命令。例如,`"yarn install"` 或 `"apt-get update && apt-get install -y curl"`。陣列語法 `["yarn", "install"]` 將直接呼叫命令(在此情況下為 `yarn`),而無需使用 shell。預設未設定。 請注意,陣列語法將不使用 shell 執行命令。您可以瞭解更多關於格式化字串與陣列屬性的資訊。 |
已附加容器配置中的變數
在已附加配置檔案的某些字串值中,可以使用以下格式的變數:**${variableName}**。下表是可用的變數列表,您可以根據需要使用。
| 變數 | 屬性 | 描述 |
|---|---|---|
${containerEnv:VAR_NAME} |
remoteEnv |
容器內現有環境變數(在此情況下為 `VAR_NAME`)的值,一旦容器啟動並執行。例如:`"remoteEnv": { "PATH": "${containerEnv:PATH}:/some/other/path" }` |
附加到 Kubernetes 叢集中的容器
要附加到 Kubernetes 叢集中的容器,請從命令面板(⇧⌘P (Windows, Linux Ctrl+Shift+P))中選擇“Dev Containers: Attach to Running Kubernetes Container...”(Dev Containers:附加到正在執行的 Kubernetes 容器...)。或者,首先安裝 Kubernetes 擴充套件和 `kubectl` 以及 Dev Containers 擴充套件。然後,從活動欄中選擇 Kubernetes 資源管理器,並展開您要附加的容器所在的叢集和 Pod。最後,右鍵單擊容器,然後從上下文選單中選擇“Attach Visual Studio Code”(附加 Visual Studio Code)。
注意: 對於 Kubernetes 叢集中的容器,目前尚不支援已附加容器的配置檔案。

後續步驟
- 建立 Dev Container - 為您的工作環境建立自定義容器。
- 高階容器 - 查詢高階容器場景的解決方案。
- devcontainer.json 參考 - 檢視
devcontainer.json模式。