開發容器 (Dev Containers) 常見問題集
本文包含了一些常見問題,協助您在不同環境中啟動並執行 Dev Containers 擴充功能。
「開發容器定義 (dev container definitions)」是否定義了應用程式的部署方式?
不會。開發容器定義的是您在準備部署應用程式之前,進行開發的環境。雖然部署容器與開發容器可能看起來相似,但您通常不會希望在部署映像檔中包含開發期間使用的工具。
devcontainers/templates 儲存庫包含了一些常見開發環境的開發容器定義集。如果您偏好使用其他的容器建置或部署工作流程,也可以在不設定開發容器定義的情況下附加到執行中的容器。
「開發容器定義」是否定義了應用程式的建置方式?例如 Buildpacks?
不會。Buildpacks 的概念專注於透過一系列定義好的步驟,將原始程式碼轉換為可部署的容器映像檔。而開發容器則是您在準備建置應用程式之前,進行開發的環境。因此,它們是互補的概念。
嘗試將本機檔案系統掛載到容器時出現錯誤
請在 Docker 工作列項目上按一下滑鼠右鍵。在 Windows 上,選擇「Settings」(設定) 選單項目,然後選擇「Resources > File Sharing」(資源 > 檔案共享),並勾選存放您原始程式碼的磁碟機。在 macOS 上,選擇「Preferences」(偏好設定) 選單項目,然後選擇「Resources > File Sharing」(資源 > 檔案共享),並確保存放您原始程式碼的資料夾位於清單中指定的檔案路徑之下。
請參閱 Docker Desktop for Windows 提示,以獲取常見 Docker for Windows 問題的解決方法資訊。
我看到關於遺失程式庫或相依性的錯誤
有些擴充功能依賴於特定 Docker 映像檔中沒有的程式庫。例如,Visual Studio Live Share 需要安裝系統層級的相依性,這些相依性列在其文件中。對這些相依性的需求可能取決於您的 Docker 映像檔所使用的作業系統(例如特定的 Linux 發行版)。您可能需要在 Docker 建置過程中,透過將必要的指令新增至 Dockerfile 來安裝這些相依性。請搜尋該特定擴充功能的文件以檢查相依性,並參閱安裝額外軟體以尋求解決問題的協助。
我可以同時連線到多個容器嗎?
目前一個 VS Code 視窗一次只能連線到一個容器,但您可以開啟一個新視窗並附加到已經在執行的容器,或者使用包含多個 devcontainer.json 檔案的通用 Docker Compose 檔案來更自動化此過程。
我可以在遠端主機上使用容器嗎?
可以,請參閱在遠端 SSH 主機上開啟資料夾或在容器中開啟遠端 Tunnels 主機的章節以獲取相關資訊。
在容器內工作時,如何將容器映像檔建置或部署到本機的 Docker / Kubernetes 安裝中?
您可以透過轉發 Docker Socket 並在容器中安裝 Docker CLI(以及 Kubernetes 的 kubectl)來建置映像檔和部署容器。詳情請參閱 Docker outside of Docker、Docker outside of Docker Compose 以及 Kubernetes-Helm 開發容器定義。
當 VS Code Server 在容器中執行時,對連線有什麼要求?
安裝 VS Code Server 需要您的本機電腦具有連往下列位置的對外 HTTPS (連接埠 443) 連線:
update.code.visualstudio.comvscode.download.prss.microsoft.com
Dev Containers 擴充功能會在連線後,於本機下載 VS Code Server 並將其複製到容器中。
如果您沒有網際網路連線,可以使用「Extensions: Install from VSIX...」(擴充功能:從 VSIX 安裝...) 指令手動安裝擴充功能。但如果您是透過擴充功能面板或 devcontainer.json 來安裝擴充功能,您的本機電腦和 VS Code Server 將需要有連往下列位置的對外 HTTPS (連接埠 443) 存取權:
marketplace.visualstudio.com*.gallerycdn.vsassets.io(Azure CDN)
最後,有些擴充功能(例如 C#)會從 download.microsoft.com 或 download.visualstudio.microsoft.com 下載次要相依性。其他擴充功能(如 Visual Studio Live Share)可能有額外的連線要求。如果您遇到困難,請查閱該擴充功能的文件以了解詳情。
VS Code Server 會在容器內隨機選取一個連接埠執行,而 VS Code 本身則使用 docker exec 透過 Docker 設定的通訊通道與其進行通訊。
身為擴充功能作者,我需要做什麼來確保我的擴充功能可以運作?
VS Code 擴充功能 API 隱藏了大部分遠端執行的實作細節,因此許多擴充功能無需修改即可在開發容器內運作。不過,我們建議您在開發容器中測試您的擴充功能,以確保所有功能皆能如預期般運作。詳情請參閱支援遠端開發一文。
還有哪些資源可以回答我的問題?
以下文章可能有助於回答您的問題:
- 進階容器設定 或 提示與技巧
- Dockerfile 參考
- Docker Compose 檔案參考
- Docker Desktop for Windows 疑難排解指南 與 常見問題集 (FAQ)
- Docker Desktop for Mac 疑難排解指南 與 常見問題集 (FAQ)
我可以在 VS Code 之外使用開發容器嗎?
隨著容器化生產工作負載變得日益普遍,開發容器已不僅限於 VS Code 的使用場景。我們正在建立開發容器規格 (Development Container Specification),旨在賦能任何工具的使用者都能配置一致的開發環境。該規格致力於尋求以常見的開發特定設定、工具和組態來豐富現有格式的方法,同時仍提供簡化、非編排的單一容器選項,以便它們能被用作編碼環境或用於持續整合與測試。
您可以前往 containers.dev 深入了解並檢閱該規格,也可以在 GitHub 上的 devcontainers/spec 儲存庫中檢閱提案並為該規格做出貢獻。