在容器中開發
Visual Studio Code 開發容器擴充套件允許您將容器用作功能齊全的開發環境。它允許您在容器內部(或掛載到容器中)開啟任何資料夾,並充分利用 Visual Studio Code 的所有功能。專案中的 devcontainer.json 檔案會告訴 VS Code 如何訪問(或建立)一個具有定義明確的工具和執行時堆疊的開發容器。此容器可用於執行應用程式或分離處理程式碼庫所需的工具、庫或執行時。
工作區檔案從本地檔案系統掛載或複製/克隆到容器中。擴充套件在容器內部安裝和執行,在那裡它們可以完全訪問工具、平臺和檔案系統。這意味著您只需連線到不同的容器,即可無縫切換整個開發環境。
這使得 VS Code 能夠提供本地質量的開發體驗,包括完整的 IntelliSense(補全)、程式碼導航和除錯,無論您的工具(或程式碼)位於何處。
Dev Containers 擴充套件支援兩種主要操作模式
- 您可以將容器用作您的全職開發環境
- 您可以連線到正在執行的容器以檢查它。
注意:Dev Containers 擴充套件支援開放的 Dev Containers 規範,該規範使任何工具中的任何人都可以配置一致的開發環境。您可以在我們的開發容器常見問題和規範網站 containers.dev 上了解更多資訊。
入門
注意:您可以透過入門級的Dev Containers 教程,瞭解如何快速開始使用開發容器。
系統要求
本地/遠端主機
您可以透過以下幾種方式將 Docker 與 Dev Containers 擴充套件一起使用,包括
- 本地安裝 Docker。
- 安裝在遠端環境中的 Docker。
- 其他符合 Docker 規範的 CLI,本地或遠端安裝。
- 雖然其他 CLI 可能有效,但它們不受官方支援。請注意,連線到 Kubernetes 叢集只需要正確配置的 kubectl CLI。
您可以在替代 Docker 選項文件中瞭解更多資訊。
以下是您在本地或遠端主機上配置 Docker 的一些特定方法
- Windows: Windows 10 專業版/企業版上的 Docker Desktop 2.0+。Windows 10 家庭版 (2004+) 需要 Docker Desktop 2.3+ 和 WSL 2 後端。(不支援 Docker Toolbox。不支援 Windows 容器映象。)
- macOS:Docker Desktop 2.0+。
- Linux:Docker CE/EE 18.06+ 和 Docker Compose 1.21+。(不支援 Ubuntu snap 包。)
- 遠端主機: 需要 1 GB RAM,但建議至少 2 GB RAM 和 2 核 CPU。
容器:
- x86_64 / ARMv7l (AArch32) / ARMv8l (AArch64) Debian 9+、Ubuntu 16.04+、CentOS / RHEL 7+
- x86_64 Alpine Linux 3.9+
如果其他基於 glibc
的 Linux 容器具有所需的 Linux 先決條件,它們也可能工作。
安裝
要開始使用,請按照以下步驟操作
-
使用以下路徑之一或替代 Docker 選項(例如遠端主機上的 Docker 或符合 Docker 規範的 CLI)為您的作業系統安裝和配置 Docker。
Windows / macOS:
-
如果您在 Windows 上使用 WSL 2,為了確保WSL 2 後端已啟用:右鍵單擊 Docker 工作列圖示並選擇設定。勾選使用基於 WSL 2 的引擎,並在資源 > WSL 整合下驗證您的分發版已啟用。
-
當不使用 WSL 2 後端時,右鍵單擊 Docker 工作列圖示,選擇設定並使用您的原始碼所在的任何位置更新資源 > 檔案共享。請參閱技巧和訣竅以進行故障排除。
Linux:
-
按照適用於您的發行版的 Docker CE/EE 官方安裝說明。如果您使用 Docker Compose,請同時遵循Docker Compose 指南。
-
使用終端執行
sudo usermod -aG docker $USER
將您的使用者新增到docker
組 -
退出並重新登入,以便您的更改生效。
-
安裝 Dev Containers 擴充套件。如果您計劃在 VS Code 中使用其他遠端擴充套件,您可以選擇安裝 Remote Development 擴充套件包。
使用 Git?
這裡有兩個需要考慮的技巧
- 如果您在 Windows 本地和容器內使用同一儲存庫,請務必設定一致的行尾。有關詳細資訊,請參閱技巧和訣竅。
- 如果您使用 Git 憑據管理器進行克隆,您的容器應該已經可以訪問您的憑據!如果您使用 SSH 金鑰,您也可以選擇共享它們。有關詳細資訊,請參閱與容器共享 Git 憑據。
選擇您的快速入門
本文件包含 3 個快速入門 - 我們建議從最適合您的工作流程和興趣的快速入門開始
- 想在快速示例儲存庫中試用開發容器?請檢視快速入門 1:試用開發容器。
- 想將開發容器新增到您現有的本地克隆專案之一?請檢視快速入門 2:在容器中開啟現有資料夾。
- 想使用儲存庫的獨立副本進行工作,例如審查 PR 或調查分支而不影響您的本地工作?請檢視快速入門 3:在隔離容器卷中開啟 Git 儲存庫或 PR。
快速入門:試用開發容器
最簡單的入門方法是試用一個示例開發容器。容器教程將引導您設定 Docker 和 Dev Containers 擴充套件,並讓您選擇一個示例
注意:如果您已經安裝了 VS Code 和 Docker,那麼您可以使用在開發容器中開啟。您可以在建立開發容器指南中瞭解更多關於此內容以及如何將其新增到您的儲存庫。
快速入門:在容器中開啟現有資料夾
本快速入門涵蓋如何為現有專案設定開發容器,以使用檔案系統上現有的原始碼作為您的全職開發環境。請按照以下步驟操作
-
啟動 VS Code,從命令面板 (F1) 或快速操作狀態列項執行開發容器:在容器中開啟資料夾...命令,然後選擇您要為其設定容器的專案資料夾。
提示: 如果您想在開啟資料夾之前編輯容器的內容或設定,您可以改為執行開發容器:新增開發容器配置檔案...。
-
現在為您的開發容器選擇一個起點。您可以從可篩選列表中選擇一個基礎開發容器模板,或者使用現有的 Dockerfile 或 Docker Compose 檔案(如果您選擇的資料夾中存在)。
注意: 當使用 Alpine Linux 容器時,某些擴充套件可能無法工作,因為擴充套件內部的原生代碼存在
glibc
依賴項。列表將根據您開啟的資料夾內容自動排序。
您可以使用其他功能自定義您的開發容器,您可以在下面閱讀更多相關資訊。
顯示的開發容器模板來自我們的第一方和社群索引,它是開發容器規範的一部分。我們以規範的一部分形式在devcontainers/templates 儲存庫中託管了一組模板。您可以瀏覽該儲存庫的
src
資料夾以檢視每個模板的內容。您還可以選擇使用開發容器 CLI 釋出和分發您自己的開發容器模板。
-
為容器選擇起點後,VS Code 會將開發容器配置檔案新增到您的專案(
.devcontainer/devcontainer.json
)。 -
VS Code 視窗將重新載入並開始構建開發容器。進度通知提供狀態更新。您只需在第一次開啟開發容器時構建它;第一次成功構建後再次開啟資料夾會快得多。
-
構建完成後,VS Code 將自動連線到容器。
您現在可以在 VS Code 中與您的專案互動,就像在本地開啟專案一樣。從現在開始,當您開啟專案資料夾時,VS Code 將自動識別並重用您的開發容器配置。
提示: 想使用遠端 Docker 主機?請參閱有關在容器中開啟遠端 SSH 主機上的資料夾的部分以獲取資訊。
雖然使用這種方法將本地檔案系統繫結掛載到容器中很方便,但它在 Windows 和 macOS 上確實存在一些效能開銷。您可以應用一些技術來提高磁碟效能,或者您可以改為使用隔離容器卷在容器中開啟儲存庫。
在 Windows 上在容器中開啟 WSL 2 資料夾
如果您正在使用 適用於 Linux 的 Windows 子系統 v2 (WSL 2) 並已啟用 Docker Desktop 的 WSL 2 後端,您可以在 WSL 中儲存的原始碼中工作!
啟用 WSL 2 引擎後,您可以選擇
- 從已使用 WSL 擴充套件開啟的資料夾中,使用開發容器:在容器中重新開啟命令。
- 從命令面板 (F1) 中選擇開發容器:在容器中開啟資料夾...,並使用本地
\\wsl$
共享(從 Windows 端)選擇一個 WSL 資料夾。
快速入門的其餘部分照常適用!您可以在WSL 擴充套件的文件中瞭解更多資訊。
在容器中開啟遠端 SSH 主機上的資料夾
如果您使用的是 Linux 或 macOS SSH 主機,您可以同時使用 Remote - SSH 和 Dev Containers 擴充套件。您甚至不需要在本地安裝 Docker 客戶端。
操作步驟如下:
- 按照 Remote - SSH 擴充套件的安裝和 SSH 主機設定步驟操作。
- 可選: 設定 SSH 基於金鑰的身份驗證到伺服器,這樣你就不需要多次輸入密碼。
- 在您的 SSH 主機上安裝 Docker。您無需在本地安裝 Docker。
- 按照 Remote - SSH 擴充套件的快速入門連線到主機並在那裡開啟資料夾。
- 從命令面板(F1,⇧⌘P (Windows, Linux Ctrl+Shift+P))使用 開發容器:在容器中重新開啟 命令。
Dev Containers 快速入門的其餘部分照常適用。您可以在Remote - SSH 擴充套件的文件中瞭解更多資訊。如果此模型不符合您的需求,您還可以檢視在遠端 Docker 主機上開發文章以獲取其他選項。
在容器中開啟遠端隧道主機上的資料夾
您可以同時使用 Remote - Tunnels 和 Dev Containers 擴充套件,在容器內開啟遠端主機上的資料夾。您甚至不需要在本地安裝 Docker 客戶端。這類似於上述 SSH 主機場景,但使用的是 Remote - Tunnels。
操作步驟如下:
- 按照 Remote - Tunnels 擴充套件的入門說明操作。
- 在您的隧道主機上安裝 Docker。您無需在本地安裝 Docker。
- 按照 Remote - Tunnels 擴充套件的步驟連線到隧道主機並在那裡開啟資料夾。
- 從命令面板(F1,⇧⌘P (Windows, Linux Ctrl+Shift+P))使用 開發容器:在容器中重新開啟 命令。
Dev Containers 快速入門的其餘部分照常適用。您可以在Remote - Tunnels 擴充套件的文件中瞭解更多資訊。如果此模型不符合您的需求,您還可以檢視在遠端 Docker 主機上開發文章以獲取其他選項。
在容器中開啟現有工作區
如果工作區僅引用 .code-workspace
檔案所在資料夾(或資料夾本身)的子資料夾的相對路徑,您還可以遵循類似的過程在單個容器中開啟 VS Code 多根工作區。
您可以選擇
- 使用開發容器:在容器中開啟工作區...命令。
- 在容器中開啟包含
.code-workspace
檔案的資料夾後,使用檔案 > 開啟工作區...。
連線後,您可能需要將 .devcontainer
資料夾新增到工作區,以便在它尚未可見時輕鬆編輯其內容。
另請注意,雖然您不能在同一 VS Code 視窗中為同一工作區使用多個容器,但您可以從單獨的視窗使用多個 Docker Compose 管理的容器。
快速入門:在隔離容器卷中開啟 Git 儲存庫或 GitHub PR
雖然您可以在容器中開啟本地克隆的儲存庫,但您可能希望使用儲存庫的獨立副本進行 PR 審查或調查其他分支而不影響您的工作。
儲存庫容器使用隔離的本地 Docker 卷,而不是繫結到本地檔案系統。除了不汙染您的檔案樹之外,本地卷還具有在 Windows 和 macOS 上提高效能的額外好處。(有關如何在其他場景中使用這些型別的卷的資訊,請參閱高階配置提高磁碟效能文章。)
例如,請按照以下步驟在儲存庫容器中開啟其中一個“試用”儲存庫
-
啟動 VS Code,並從命令面板 (F1) 執行開發容器:在容器卷中克隆儲存庫...。
-
在出現的輸入框中輸入
microsoft/vscode-remote-try-node
(或任何其他“試用”儲存庫)、Git URI、GitHub 分支 URL 或 GitHub PR URL,然後按 Enter。提示: 如果您選擇私人儲存庫,您可能需要設定憑據管理器或將您的 SSH 金鑰新增到您的 SSH 代理。請參閱與容器共享 Git 憑據。
-
如果您的儲存庫中沒有
.devcontainer/devcontainer.json
檔案,系統會要求您從可篩選列表或現有 Dockerfile 或 Docker Compose 檔案(如果存在)中選擇一個起點。注意: 當使用 Alpine Linux 容器時,某些擴充套件可能無法工作,因為擴充套件內部的原生代碼存在
glibc
依賴項。列表將根據您開啟的資料夾內容自動排序。顯示的開發容器模板來自我們的第一方和社群索引,它是開發容器規範的一部分。我們以規範的一部分形式在devcontainers/templates 儲存庫中託管了一組模板。您可以瀏覽該儲存庫的
src
資料夾以檢視每個模板的內容。 -
VS Code 視窗(例項)將重新載入、克隆原始碼並開始構建開發容器。進度通知提供狀態更新。
如果您在步驟 2 中貼上了 GitHub 拉取請求 URL,則 PR 將自動檢出,並且 GitHub Pull Requests 擴充套件將安裝在容器中。該擴充套件提供其他與 PR 相關的功能,例如 PR 瀏覽器、與 PR 註釋內聯互動以及狀態列可見性。
-
構建完成後,VS Code 將自動連線到容器。您現在可以在這個獨立環境中處理儲存庫原始碼,就像您在本地克隆程式碼一樣。
請注意,如果容器因 Docker 構建錯誤等原因無法啟動,您可以在出現的對話方塊中選擇在恢復容器中重新開啟,進入一個“恢復容器”,允許您編輯 Dockerfile 或其他內容。這會在最小容器中開啟克隆儲存庫的 docker 卷,並顯示建立日誌。修復完成後,使用在容器中重新開啟重試。
提示: 想使用遠端 Docker 主機?請參閱有關在容器中開啟遠端 SSH 主機上的資料夾的部分以獲取資訊。
信任您的工作區
Visual Studio Code 非常重視安全性,並希望幫助您安全地瀏覽和編輯程式碼,無論來源或原始作者是誰。工作區信任功能可讓您決定專案資料夾是否應允許或限制自動程式碼執行。
Dev Containers 擴充套件已採用工作區信任。根據您開啟和與原始碼互動的方式,系統會提示您決定是否信任您在不同時間點編輯或執行的程式碼。
在容器中重新開啟資料夾
為現有專案設定開發容器需要信任本地(或 WSL)資料夾。在視窗重新載入之前,系統會要求您信任本地(或 WSL)資料夾。
此流程有幾個例外
- 單擊最近的條目時。
- 如果尚未授予信任,則使用在容器中開啟資料夾命令將在視窗重新載入後要求信任。
連線到現有容器
當連線到現有容器時,系統會要求您確認連線意味著您信任該容器。這隻確認一次。
在卷中克隆儲存庫
當在容器卷中克隆儲存庫時,系統會要求您確認克隆儲存庫意味著您信任該儲存庫。這隻確認一次。
檢查卷
遠端執行 Docker 守護程式
這意味著信任執行 Docker 守護程式的機器。沒有額外的提示需要確認(只有上面列出的本地/WSL 情況)。
建立 devcontainer.json 檔案
VS Code 的容器配置儲存在 devcontainer.json 檔案中。此檔案類似於用於除錯配置的 launch.json
檔案,但用於啟動(或連線到)您的開發容器。您還可以指定容器執行後要安裝的任何擴充套件或用於準備環境的建立後命令。開發容器配置位於 .devcontainer/devcontainer.json
下,或作為 .devcontainer.json
檔案(注意點字首)儲存在專案的根目錄中。
從命令面板 (F1) 選擇開發容器:新增開發容器配置檔案...命令,會將所需檔案作為起點新增到您的專案,您可以根據需要進一步自定義這些檔案。該命令允許您從基於資料夾內容的列表中選擇預定義的容器配置,重用現有 Dockerfile,或重用現有 Docker Compose 檔案。
您還可以手動建立 devcontainer.json,並使用任何映象、Dockerfile 或一組 Docker Compose 檔案作為起點。這是一個使用預構建的 開發容器映象 的簡單示例
{
"image": "mcr.microsoft.com/devcontainers/typescript-node",
"forwardPorts": [3000],
"customizations": {
// Configure properties specific to VS Code.
"vscode": {
// Add the IDs of extensions you want installed when the container is created.
"extensions": ["streetsidesoftware.code-spell-checker"]
}
}
}
注意: 根據基礎映象中的內容,將向容器新增其他配置。例如,我們在上面添加了
streetsidesoftware.code-spell-checker
擴充套件,容器還將包含"dbaeumer.vscode-eslint"
,因為它是mcr.microsoft.com/devcontainers/typescript-node
的一部分。這在使用devcontainer.json
預構建時會自動發生,您可以在預構建部分中瞭解更多資訊。
要了解有關建立 devcontainer.json
檔案的更多資訊,請參閱建立開發容器。
開發容器特性
開發容器“特性”是自包含、可共享的安裝程式碼和開發容器配置單元。這個名稱來源於這樣一種理念:引用其中一個特性可以讓您快速輕鬆地向開發容器中新增更多工具、執行時或庫“特性”,供您或您的協作者使用。
當您使用開發容器:新增開發容器配置檔案時,系統會顯示一個指令碼列表,用於自定義現有的開發容器配置,例如安裝 Git 或 Azure CLI
當您在容器中重建並重新開啟時,您選擇的特性將在您的 devcontainer.json
中可用
"features": {
"ghcr.io/devcontainers/features/github-cli:1": {
"version": "latest"
}
}
在直接編輯 devcontainer.json
中的 "features"
屬性時,您將獲得 IntelliSense
開發容器:配置容器特性命令允許您更新現有配置。
VS Code UI 中源自的特性現在來自一箇中央索引,您也可以向其貢獻。請參閱 Dev Containers 規範網站以獲取當前列表,並瞭解如何釋出和分發特性。
“始終安裝”特性
與您可以設定擴充套件始終安裝在您的開發容器中的方式類似,您可以使用 dev.containers.defaultFeatures 使用者設定來設定您希望始終安裝的特性
"dev.containers.defaultFeatures": {
"ghcr.io/devcontainers/features/github-cli:1": {}
},
建立您自己的特性
建立和釋出您自己的開發容器特性也很容易。已釋出的特性可以作為 OCI 工件儲存和共享,來自任何支援的公共或私有容器登錄檔。您可以在 containers.dev 上檢視當前已釋出特性的列表。
特性是一個自包含實體,位於一個資料夾中,至少包含 devcontainer-feature.json
和 install.sh
入口指令碼
+-- feature
| +-- devcontainer-feature.json
| +-- install.sh
| +-- (other files)
檢視 feature/starter 儲存庫,獲取有關使用開發容器 CLI 釋出您自己的公共或私人特性的說明。
特性規範與分發
特性是開源 開發容器規範 的關鍵組成部分。您可以檢視有關特性工作原理及其分發的更多資訊。
預構建開發容器映象
我們建議預構建包含您所需工具的映象,而不是每次在開發容器中開啟專案時都建立和構建容器映象。使用預構建映象將加快容器啟動速度,簡化配置,並允許您鎖定到特定版本的工具,從而提高供應鏈安全性並避免潛在的損壞。您可以透過使用 GitHub Actions 等 DevOps 或持續整合 (CI) 服務安排構建來自動化映象預構建。
更好的是——預構建映象可以包含 Dev Container 元資料,因此當您引用映象時,設定將自動拉取過來。
我們建議使用 Dev Container CLI(或其他支援 規範 的實用程式,如 GitHub Action)來預構建您的映象,因為它與 Dev Containers 擴充套件的最新功能保持同步——包括 開發容器特性。構建映象後,您可以將其推送到容器登錄檔(如 Azure Container Registry、GitHub Container Registry 或 Docker Hub),並直接引用它。
您可以使用 devcontainers/ci 儲存庫中的 GitHub Action,幫助您在工作流中重用開發容器。
有關更多資訊,請轉到dev container CLI 文章中的預構建映象。
繼承元資料
您可以透過映象標籤在預構建映象中包含開發容器配置和特性元資料。這使得映象自包含,因為當引用映象時,這些設定會自動獲取——無論是直接引用、在引用的 Dockerfile 中使用 FROM
,還是在 Docker Compose 檔案中。這有助於防止您的開發容器配置和映象內容不同步,並允許您透過簡單的映象引用將同一配置的更新推送到多個儲存庫。
當您使用 Dev Container CLI(或其他支援 規範 的實用程式,例如 GitHub Action 或 Azure DevOps 任務)預構建時,此元資料標籤將自動新增,幷包含 devcontainer.json
中的設定以及任何引用的 Dev Container 特性。
這允許您擁有一個單獨的更復雜的 devcontainer.json
,用於預構建映象,然後在單個或多個儲存庫中擁有一個大大簡化的 devcontainer.json
。映象的內容將與此簡化的 devcontainer.json
內容在建立容器時合併(有關合並邏輯的資訊,請參閱規範)。但最簡單地說,您可以直接在 devcontainer.json
中引用映象,以使設定生效
{
"image": "mcr.microsoft.com/devcontainers/go:1"
}
請注意,您也可以選擇手動將元資料新增到影像標籤中。即使您沒有使用 Dev Container CLI 構建,這些屬性也會被拾取(即使您使用 CLI,也可以透過 CLI 更新)。例如,考慮以下 Dockerfile 片段
LABEL devcontainer.metadata='[{ \
"capAdd": [ "SYS_PTRACE" ], \
"remoteUser": "devcontainer", \
"postCreateCommand": "yarn install" \
}]'
檢查卷
有時您可能會遇到需要檢查或更改 Docker 命名卷的情況。您可以透過從命令面板 (F1) 選擇開發容器:在開發容器中探索卷...,在不建立或修改 devcontainer.json
檔案的情況下,使用 VS Code 處理這些內容。
您還可以在遠端資源管理器中檢查您的卷。確保在下拉選單中選擇了容器,然後您會看到一個開發卷部分。您可以右鍵單擊卷以檢查其建立資訊,例如卷何時建立、克隆了哪個儲存庫以及掛載點。您還可以在開發容器中探索它。
如果您安裝了 容器工具擴充套件,您可以右鍵單擊容器資源管理器的卷部分中的卷,然後選擇在開發容器中探索。
管理擴充套件
VS Code 在兩個地方執行擴充套件:本地 UI/客戶端,或在容器中。雖然影響 VS Code UI 的擴充套件(如主題和程式碼片段)安裝在本地,但大多數擴充套件將駐留在特定容器中。這允許您僅在容器中安裝給定任務所需的擴充套件,並透過連線到新容器無縫切換整個工具鏈。
如果您從“擴充套件”檢視安裝擴充套件,它將自動安裝在正確的位置。您可以根據類別分組判斷擴充套件的安裝位置。將有一個本地 - 已安裝類別以及您的容器類別。
注意: 如果您是擴充套件作者,並且您的擴充套件無法正常工作或安裝在錯誤的位置,請參閱支援遠端開發以獲取詳細資訊。
實際需要遠端執行的本地擴充套件將顯示在本地 - 已安裝類別中,處於已停用狀態。選擇安裝可在遠端主機上安裝擴充套件。
您還可以透過轉到“擴充套件”檢視,並使用本地 - 已安裝標題欄右側的雲按鈕選擇在開發容器中安裝本地擴充套件:{名稱},以在開發容器中安裝所有本地安裝的擴充套件。這將顯示一個下拉選單,您可以在其中選擇要在容器中安裝的本地安裝擴充套件。
但是,某些擴充套件可能要求您在容器中安裝其他軟體。如果您遇到問題,請查閱擴充套件文件以獲取詳細資訊。
將擴充套件新增到 devcontainer.json
您可以手動編輯 devcontainer.json 檔案以新增擴充套件 ID 列表,也可以右鍵單擊“擴充套件”檢視中的任何擴充套件並選擇新增到 devcontainer.json。
退出擴充套件
如果基礎映象或功能配置了您不希望安裝在開發容器中的擴充套件,您可以透過用減號列出該擴充套件來選擇退出。例如
{
"image": "mcr.microsoft.com/devcontainers/typescript-node:1-20-bookworm",
"customizations": {
"vscode": {
"extensions": ["-dbaeumer.vscode-eslint"]
}
}
}
“始終安裝”的擴充套件
如果有些擴充套件您希望始終安裝在任何容器中,您可以更新 dev.containers.defaultExtensions 使用者設定。例如,如果您想安裝 GitLens 和 Resource Monitor 擴充套件,您將按如下方式指定它們的擴充套件 ID
"dev.containers.defaultExtensions": [
"eamodio.gitlens",
"mutantdino.resourcemonitor"
]
高階:強制擴充套件在本地或遠端執行
擴充套件通常設計和測試為僅在本地或遠端執行,而不是兩者都執行。但是,如果擴充套件支援,你可以在 settings.json
檔案中強制它在特定位置執行。
例如,以下設定將強制 Container Tools 擴充套件在本地執行,以及 Remote - SSH: Editing Configuration Files 擴充套件在遠端執行,而不是使用它們的預設設定:
"remote.extensionKind": {
"ms-azuretools.vscode-containers": [ "ui" ],
"ms-vscode-remote.remote-ssh-edit": [ "workspace" ]
}
"ui"
而不是 "workspace"
的值將強制擴充套件在本地 UI/客戶端側執行。通常,這僅應用於測試,除非擴充套件文件中另有說明,因為它可能會破壞擴充套件。有關詳細資訊,請參閱首選擴充套件位置部分。
轉發或釋出埠
容器是獨立的環境,因此如果您想訪問容器內的伺服器、服務或其他資源,您需要“轉發”或“釋出”埠到您的主機。您可以配置容器以始終公開這些埠,或者只是臨時轉發它們。
始終轉發埠
您可以使用 devcontainer.json
中的 forwardPorts
屬性,指定在連線或開啟容器中的資料夾時始終要轉發的埠列表。
"forwardPorts": [3000, 3001]
只需重新載入/重新開啟視窗,當 VS Code 連線到容器時,該設定將生效。
暫時轉發埠
如果您需要訪問一個您沒有新增到 devcontainer.json
或在 Docker Compose 檔案中釋出的埠,您可以透過從命令面板 (F1) 執行轉發埠命令,臨時轉發一個新的埠,持續到會話結束。
選擇埠後,通知會告訴您用於訪問容器中埠的 localhost 埠。例如,如果您轉發了一個偵聽埠 3000 的 HTTP 伺服器,通知可能會告訴您它被對映到 localhost 上的埠 4123。然後,您可以使用 https://:4123
連線到此遠端 HTTP 伺服器。
如果您以後需要訪問,相同的資訊可在遠端資源管理器的轉發埠部分中找到。
如果您希望 VS Code 記住您已轉發的任何埠,請在設定編輯器 (⌘, (Windows, Linux Ctrl+,)) 中勾選遠端:恢復轉發埠,或在 settings.json
中設定 "remote.restoreForwardedPorts": true
。
釋出埠
Docker 在建立容器時有“釋出”埠的概念。已釋出埠的行為與您提供給本地網路的埠非常相似。如果您的應用程式只接受來自 localhost
的呼叫,它將拒絕來自已釋出埠的連線,就像您的本地機器會拒絕網路呼叫一樣。另一方面,轉發埠對應用程式來說實際上看起來像 localhost
。每種情況在不同的情況下都很有用。
要釋出埠,您可以
-
使用 appPort 屬性: 如果您在
devcontainer.json
中引用映象或 Dockerfile,您可以使用appPort
屬性將埠釋出到主機。"appPort": [ 3000, "8921:5000" ]
-
使用 Docker Compose 埠對映: 埠對映可以輕鬆新增到您的
docker-compose.yml
檔案以釋出其他埠。ports: - "3000" - "8921:5000"
在每種情況下,您都需要重建容器才能使設定生效。當您連線到容器時,您可以透過在命令面板 (F1) 中執行開發容器:重建容器命令來完成此操作。
開啟終端
從 VS Code 在容器中開啟終端很簡單。一旦您在容器中打開了一個資料夾,您在 VS Code 中開啟的任何終端視窗(終端 > 新建終端)都將自動在容器中執行,而不是在本地。
您還可以從同一終端視窗使用 code
命令列執行多項操作,例如在容器中開啟新檔案或資料夾。鍵入 code --help
以瞭解命令列中可用的選項。
在容器中除錯
一旦您在容器中打開了一個資料夾,您就可以像在本地執行應用程式一樣使用 VS Code 的偵錯程式。例如,如果您在 launch.json
中選擇一個啟動配置並開始除錯 (F5),應用程式將在遠端主機上啟動並附加偵錯程式。
有關在 .vscode/launch.json
中配置 VS Code 除錯功能的詳細資訊,請參閱除錯文件。
容器特定設定
當您連線到開發容器時,VS Code 的本地使用者設定也會被重用。雖然這保持了您使用者體驗的一致性,但您可能希望在本地計算機和每個容器之間更改其中一些設定。幸運的是,一旦您連線到容器,您還可以透過從命令面板 (F1) 執行首選項:開啟遠端設定命令,或在設定編輯器中選擇遠端選項卡來設定容器特定設定。這些設定將覆蓋您連線到容器時已有的任何本地設定。
預設容器特定設定
您可以使用 settings
屬性在 devcontainer.json
中包含容器特定設定的預設值。這些值將在容器建立後自動放置在容器內的容器特定設定檔案中。
例如,將此新增到 .devcontainer/devcontainer.json
將設定 Java 主路徑
// Configure tool-specific properties.
"customizations": {
// Configure properties specific to VS Code.
"vscode": {
"settings": {
"java.home": "/docker-java-home"
}
}
}
由於這只是建立預設值,因此在建立容器後,您仍然可以根據需要更改設定。
管理容器
預設情況下,當您開啟資料夾時,Dev Containers 擴充套件會自動啟動 devcontainer.json
中提及的容器。當您關閉 VS Code 時,擴充套件會自動關閉您已連線的容器。您可以透過將 "shutdownAction": "none"
新增到 devcontainer.json
來更改此行為。
雖然您可以使用命令列管理您的容器,但您也可以使用遠端資源管理器。要停止容器,請從下拉選單中選擇容器(如果存在),右鍵單擊正在執行的容器,然後選擇停止容器。您還可以啟動已退出的容器、刪除容器和刪除最近的資料夾。在詳細資訊檢視中,您可以轉發埠並在瀏覽器中開啟已轉發的埠。
如果您想清理映象或批次刪除容器,請參閱清理未使用的容器和映象以獲取不同選項。
使用 dotfile 儲存庫進行個性化設定
Dotfiles 是檔名以點 (.
) 開頭的檔案,通常包含各種應用程式的配置資訊。由於開發容器可以涵蓋廣泛的應用程式型別,因此將這些檔案儲存在某個位置可能很有用,以便在容器啟動並執行後可以輕鬆地將它們複製到容器中。
一種常見的方法是將這些 dotfile 儲存在 GitHub 儲存庫中,然後使用實用程式克隆並應用它們。Dev Containers 擴充套件內建支援將其與您自己的容器一起使用。如果您對這個想法不熟悉,請檢視存在的不同dotfiles 引導儲存庫。
要使用它,請將您的 dotfiles GitHub 儲存庫新增到 VS Code 的使用者設定 (⌘, (Windows, Linux Ctrl+,)),如下所示
或在 settings.json
中
{
"dotfiles.repository": "your-github-id/your-dotfiles-repo",
"dotfiles.targetPath": "~/dotfiles",
"dotfiles.installCommand": "install.sh"
}
從這一點開始,每當建立容器時,都將使用 dotfiles 儲存庫。
已知限制
開發容器限制
- 不支援 Windows 容器映象。
- 多根工作區中的所有根/資料夾都將在同一個容器中開啟,無論低級別是否存在配置檔案。
- 不支援非官方的 Ubuntu Docker snap Linux 包。請遵循適用於您的發行版的官方 Docker 安裝說明。
- 不支援 Windows 上的 Docker Toolbox。
- 如果你使用 SSH 克隆 Git 倉庫,並且你的 SSH 金鑰有密碼短語,VS Code 的拉取和同步功能在遠端執行時可能會掛起。請使用不帶密碼短語的 SSH 金鑰,使用 HTTPS 克隆,或者從命令列執行
git push
來解決此問題。 - 本地代理設定在容器內部不會重複使用,這可能會阻止擴充套件工作,除非配置了適當的代理資訊(例如,帶有適當代理資訊的全域性
HTTP_PROXY
或HTTPS_PROXY
環境變數)。 - 當 ssh-agent 執行版本 <= 8.8 且 SSH 客戶端(在任何平臺)執行版本 >= 8.9 時,Windows 上的 OpenSSH 版本存在不相容性。解決方法是將 Windows 上的 OpenSSH 升級到 8.9 或更高版本,可以使用 winget 或從 Win32-OpenSSH/releases 安裝程式。(請注意,
ssh-add -l
將正常工作,但ssh
將因
而失敗。這也會影響 Git 在使用 SSH 連線到儲存庫時。): Permission denied (publickey)
有關與容器相關的活動問題列表,請參閱此處。
Docker 限制
有關更多資訊,請參閱 Docker 故障排除指南,適用於 Windows 或 Mac。
容器工具擴充套件限制
如果您從 WSL、Remote - Tunnels 或 Remote - SSH 視窗使用容器工具或 Kubernetes 擴充套件,則在容器資源管理器或 Kubernetes 檢視中使用附加 Visual Studio Code上下文選單操作會再次要求從可用容器中進行選擇。
擴充套件限制
目前,大多數擴充套件無需修改即可在 Dev Containers 中工作。但是,在某些情況下,某些功能可能需要更改。如果您遇到擴充套件問題,請參閱此處,其中總結了常見問題和解決方案,您可以在報告問題時向擴充套件作者提及。
此外,雖然支援 Alpine,但容器中安裝的一些擴充套件可能由於擴充套件內部本機程式碼中的 glibc
依賴項而無法工作。請參閱使用 Linux 進行遠端開發文章以獲取詳細資訊。
高階容器配置
有關以下主題的資訊,請參閱高階容器配置文章
- 新增環境變數
- 新增另一個本地檔案掛載
- 更改或移除預設原始碼掛載
- 提高容器磁碟效能
- 向您的開發容器新增非 root 使用者
- 為 Docker Compose 設定專案名稱
- 在容器內使用 Docker 或 Kubernetes
- 同時連線到多個容器
- 在遠端 Docker Machine 或 SSH 主機上的容器中進行開發
- 減少 Dockerfile 構建警告
- 與您的容器共享 Git 憑據
devcontainer.json 參考
有一個完整的 devcontainer.json 參考,您可以在其中檢視檔案架構,以幫助您自定義開發容器並控制如何連線到正在執行的容器。
問題或反饋
- 請參閱提示與技巧或常見問題。
- 在 Stack Overflow 上搜索。
- 新增功能請求或報告問題。
- 建立開發容器模板或特性供他人使用。
- 審查並提供關於 開發容器規範 的反饋。
- 為我們的文件或VS Code 本身做出貢獻。
- 請參閱我們的貢獻指南瞭解詳細資訊。
故障排除
無法寫入檔案(無許可權 (FileSystemError))
在以下配置中執行開發容器時,您可能會遇到此問題
- Docker Desktop 在 Windows Subsystem for Linux (WSL) 後端執行
- 啟用了 增強容器隔離 (ECI)
請檢視問題 #8278 以獲取可能的解決方案。
後續步驟
- 連線到正在執行的容器 - 連線到已在執行的 Docker 容器。
- 建立開發容器 - 為您的工作環境建立自定義容器。
- 高階容器 - 查詢高階容器場景的解決方案。
- devcontainer.json 參考 - 檢視
devcontainer.json
模式。