附加到正在執行的容器
Visual Studio Code 可以為您建立和啟動容器,但這可能不符合您的工作流程,您可能更喜歡將 VS Code“附加”到已在執行的 Docker 容器——無論它是如何啟動的。附加後,您可以像使用 devcontainer.json 在容器中開啟資料夾一樣,安裝擴充套件、編輯和除錯。
附加到 Docker 容器
要附加到 Docker 容器,請從命令面板 (F1) 中選擇開發容器:附加到正在執行的容器...,或者使用活動欄中的遠端資源管理器,然後從容器檢視中,選擇您要連線的容器上的附加到容器內聯操作。
注意: 當使用 Alpine Linux 容器時,某些擴充套件可能無法工作,因為擴充套件內部的原生代碼存在
glibc
依賴項。
附加容器配置檔案
VS Code 支援映像或容器名稱級別的配置檔案,以在您重複連線到給定 Docker 容器時加快設定速度。附加後,無論何時您開啟一個資料夾,安裝擴充套件或轉發埠,本地的映像特定配置檔案都將自動更新以記住您的設定,以便當您再次附加時,一切都恢復到正確的位置。
-
預設情況下,使用映像級別配置。要在附加後檢視或更新它,請從命令面板 (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 |
陣列 | 一個擴充套件 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 | 指示用於“探測”使用者環境變數以包含在 VS Code 或其他連線工具程序中的 shell 型別: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
模式。