附加至執行中的容器
Visual Studio Code 可以為您建立並啟動容器,但這可能不符合您的工作流程,您或許更傾向於將 VS Code「附加」到已經在執行的 Docker 容器中,無論它是如何啟動的。一旦附加成功,您就可以像使用 devcontainer.json 在容器中開啟資料夾一樣,安裝擴充功能、進行編輯與偵錯。
附加至 Docker 容器
若要附加至 Docker 容器,請從命令面板(F1)選擇 Dev Containers: Attach to Running Container...,或者使用活動列(Activity Bar)中的 Remote Explorer,並從 Containers 檢視中,點選您想要連線之容器上的 Attach to Container 行內動作。

注意:使用 Alpine Linux 容器時,某些擴充功能可能因擴充功能內的原生程式碼依賴
glibc而無法運作。
附加容器的設定檔
VS Code 支援以映像檔或容器名稱為層級的設定檔,以便在您重複連線至指定的 Docker 容器時加快設定速度。一旦附加後,每當您開啟資料夾、安裝擴充功能,或轉送連接埠時,系統都會自動更新本機的映像檔專用設定檔以記錄您的設定,這樣當您下次再附加時,一切都會回到正確的位置。
-
預設使用映像檔層級 (image-level) 的設定。若要在附加後檢視或更新該設定,請從命令面板(F1)選擇 Dev Containers: Open Container Configuration File。
-
如果您傾向將設定繫結至容器名稱 (container name),請在附加後從命令面板(F1)選擇 Dev Containers: Open Named Configuration File。之後進行的任何更新都會套用到此名稱層級的設定,而非映像檔層級。
這兩種檔案皆支援 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...,然後從顯示的清單中挑選映像檔/容器名稱。
最後,如果您有一些想要安裝的擴充功能,無論附加到哪個容器都希望其存在,您可以更新 settings.json 來指定應該始終安裝的擴充功能列表。
附加容器的設定參考
附加容器的設定檔與 devcontainer.json 類似,並支援其屬性的子集。
| 屬性 | 類型 | 說明 |
|---|---|---|
workspaceFolder |
string | 設定 VS Code 連線至容器時應開啟的預設路徑(通常是容器內原始程式碼所在的掛載磁碟區路徑)。預設不設定(將開啟空白視窗)。 |
extensions |
array | 一個擴充功能 ID 陣列,指定容器建立時應該安裝在容器內的擴充功能。預設值為 []。 |
settings |
object | 將預設的 settings.json 值加入到容器/機器專用的設定檔中。 |
forwardPorts |
array | 應從容器內部轉送到本機的連接埠清單。 |
portsAttributes |
object | 將連接埠號碼、"host:port" 值、範圍或正規表示式對應至一組預設選項的物件。請參閱連接埠屬性以取得可用選項。例如:"portsAttributes": {"3000": {"label": "Application port"}} |
otherPortsAttributes |
object | 針對未透過 portsAttributes 設定的連接埠、連接埠範圍與主機的預設選項。請參閱連接埠屬性以取得可用選項。例如:"otherPortsAttributes": {"onAutoForward": "silent"} |
remoteEnv |
object | 一組名稱-數值對,用於設定或覆寫 VS Code(或終端機等子處理程序)的環境變數,但不會影響整個容器。在數值中可參照環境變數與預先定義的變數。 例如: "remoteEnv": { "PATH": "${containerEnv:PATH}:/some/other/path" } |
remoteUser |
string | 覆寫 VS Code 在容器中執行時所使用的使用者(同時也會套用於終端機、工作或偵錯等子處理程序)。預設為容器整體執行時的使用者(通常是 root)。 |
userEnvProbe |
enum | 指示用來「探測」使用者環境變數以包含在 VS Code 或其他已連線工具處理程序中的 Shell 類型:none、interactiveShell、loginShell 或 loginInteractiveShell(預設值)。使用的特定 Shell 取決於使用者的預設 Shell(通常是 bash)。例如,bash 互動式 Shell 通常會包含設定在 /etc/bash.bashrc 和 ~/.bashrc 中的變數,而登入 Shell 通常會包含來自 /etc/profile 和 ~/.profile 的變數。將此屬性設為 loginInteractiveShell 將會從這四個檔案中獲取變數。 |
postAttachCommand |
字串, array |
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...。或者,請先安裝 Kubernetes 擴充功能 與 kubectl,以及 Dev Containers 擴充功能。接著,從活動列中選擇 Kubernetes 總管(explorer),展開您想要附加的容器所在的叢集與 Pod。最後,在該容器上按一下滑鼠右鍵,並從內容選單中選擇 Attach Visual Studio Code。
注意:Kubernetes 叢集中的容器目前尚未支援附加容器的設定檔。

後續步驟
- 建立開發容器 (Create a Dev Container) - 為您的工作環境建立自訂容器。
- 進階容器 - 尋找進階容器場景的解決方案。
- devcontainer.json 參考 - 查看
devcontainer.json架構。