附加到執行中的容器
Visual Studio Code 可以為您建立並啟動容器,但這可能不符合您的工作流程,而且您可能偏好將 VS Code「附加」到已在執行的 Docker 容器,無論它是如何啟動的。一旦附加,您就可以安裝擴充功能、編輯和偵錯,就像使用 devcontainer.json 在容器中開啟資料夾一樣。
附加到 Docker 容器
若要附加到 Docker 容器,請從命令面板 (F1) 選取 [開發容器: 附加到執行中的容器...],或使用活動列中的 [遠端總管],然後從 [容器] 檢視中,選取您要連線之容器上的 [附加到容器] 行內動作。
注意: 當使用 Alpine Linux 容器時,某些擴充功能可能無法運作,因為擴充功能內部的原生程式碼中有
glibc
相依性。
附加的容器組態檔
當您重複連線到指定的 Docker 容器時,VS Code 支援映像或容器名稱層級的組態檔,以加速設定。一旦附加,每當您開啟資料夾、安裝擴充功能 或 轉送連接埠 時,本機特定映像的組態檔將會自動更新,以記住您的設定,以便您再次附加時,一切都會回到正確的位置。
-
依預設,會使用映像層級組態。若要在附加後檢視或更新它,請從命令面板 (F1) 選取 [開發容器: 開啟容器組態檔]。
-
如果您偏好將組態連結到容器名稱,請在附加後從命令面板 (F1) 選取 [開發容器: 開啟具名組態檔]。從此時起的所有更新都將套用至此名稱層級組態,而不是映像層級。
這兩個檔案都支援 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) 選取 [開發容器: 開啟附加的容器組態檔...],然後從顯示的清單中選取映像/容器名稱。
最後,如果您有想要安裝的擴充功能,無論您附加到哪個容器,您可以更新 settings.json
以指定 應永遠安裝的擴充功能 清單。
附加的容器組態參考
附加的容器組態檔與 devcontainer.json 類似,並支援其屬性的子集。
屬性 | 類型 | 描述 |
---|---|---|
workspaceFolder |
字串 | 設定 VS Code 連線到容器時應開啟的預設路徑 (通常是磁碟區掛接的路徑,可在容器中找到原始程式碼)。預設為未設定 (開啟空白視窗)。 |
extensions |
陣列 | 擴充功能識別碼的陣列,指定在建立容器時應安裝在容器內部的擴充功能。預設值為 [] 。 |
settings |
物件 | 將預設 settings.json 值新增至容器/機器特定的設定檔。 |
forwardPorts |
陣列 | 應從容器內部轉送到本機的連接埠清單。 |
portsAttributes |
物件 | 物件,將連接埠號碼、"host:port" 值、範圍或規則運算式對應至一組預設選項。請參閱 連接埠屬性,以取得可用的選項。例如"portsAttributes": {"3000": {"label": "應用程式連接埠"}} |
otherPortsAttributes |
物件 | 未使用 portsAttributes 設定的連接埠、連接埠範圍和主機的預設選項。請參閱 連接埠屬性,以取得可用的選項。例如"otherPortsAttributes": {"onAutoForward": "silent"} |
remoteEnv |
物件 | 一組名稱值組,用於設定或覆寫 VS Code (或子處理程序,例如終端機) 的環境變數,但不適用於整個容器。環境和 預先定義的變數 可以在值中參考。 例如: "remoteEnv": { "PATH": "${containerEnv:PATH}:/some/other/path" } |
remoteUser |
字串 | 覆寫 VS Code 在容器中執行的使用者身分 (以及子處理程序,例如終端機、工作或偵錯)。預設為容器整體執行的使用者身分 (通常為 root )。 |
userEnvProbe |
列舉 | 指出要用於「探查」使用者環境變數的 Shell 類型,以包含在 VS Code 或其他連線工具的處理程序中:none 、interactiveShell 、loginShell 或 loginInteractiveShell (預設值)。使用的特定 Shell 是根據使用者的預設 Shell (通常為 bash)。例如,bash 互動式 Shell 通常會包含在 /etc/bash.bashrc 和 ~/.bashrc 中設定的變數,而登入 Shell 通常會包含來自 /etc/profile 和 ~/.profile 的變數。將此屬性設定為 loginInteractiveShell 將會從所有四個檔案取得變數。 |
postAttachCommand |
字串, 陣列 |
在 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)) 選取 [開發容器: 附加到執行中的 Kubernetes 容器...]。或者,先安裝 Kubernetes 擴充功能 和 kubectl
以及開發容器擴充功能。然後從活動列選取 Kubernetes 總管,並展開您要附加之容器所在的叢集和 Pod。最後,在容器上按一下滑鼠右鍵,然後從內容功能表選取 [附加 Visual Studio Code]。
注意: 附加的容器組態檔尚不支援 Kubernetes 叢集中的容器。
後續步驟
- 建立開發容器 - 為您的工作環境建立自訂容器。
- 進階容器 - 尋找進階容器案例的解決方案。
- devcontainer.json 參考 - 檢閱
devcontainer.json
結構描述。