开发容器常见问题解答
本文包含一些关于在不同环境中启动并运行开发容器扩展的常见问题。
“开发容器定义”是否定义了如何部署应用程序?
否。开发容器定义了在准备部署之前开发应用程序的环境。虽然部署和开发容器可能彼此相似,但您可能不希望在部署映像中包含在开发期间使用的工具。
devcontainers/templates 存储库包含一组用于某些常见开发环境的开发容器定义。如果您更喜欢使用备用容器构建或部署工作流,您还可以附加到正在运行的容器,而无需设置开发容器定义。
“开发容器定义”是否定义了如何构建应用程序?例如 Buildpacks?
否。Buildpacks 概念侧重于获取源代码并通过一系列定义的步骤生成可部署的容器映像。开发容器是您在准备构建之前开发应用程序的环境。因此,它们是互补的概念。
尝试将本地文件系统装载到容器中时,我看到错误
右键单击 Docker 任务栏项目。在 Windows 上,选择“设置”菜单项,然后选择“资源 > 文件共享”,并选中源代码所在的驱动器。在 macOS 上,选择“首选项”菜单项,然后选择“资源 > 文件共享”,并确保包含源代码的文件夹位于列表中指定的文件路径下。
有关解决常见 Docker for Windows 问题的方法的信息,请参阅Docker Desktop for Windows 技巧。
我看到一个关于缺少库或依赖项的错误
某些扩展依赖于特定 Docker 映像中未找到的库。例如,Visual Studio Live Share 需要安装系统级依赖项,这些依赖项在其文档中列出。这些依赖项的需求可能取决于 Docker 映像使用的操作系统(例如,特定的 Linux 发行版)。您可能需要在 Docker 构建过程中安装这些依赖项,方法是将所需命令添加到您的 Dockerfile。搜索特定扩展的文档以检查依赖项,并参阅安装其他软件以获得解决问题的帮助。
我可以一次连接到多个容器吗?
一个 VS Code 窗口当前只能连接到一个窗口,但您可以打开一个新窗口并附加到已在运行的容器,或者使用带有多个 devcontainer.json
文件的通用 Docker Compose 文件来稍微自动化该过程。
我可以使用远程主机上的容器吗?
是的,有关信息,请参阅关于在远程 SSH 主机上打开文件夹或在容器中打开远程隧道主机上的文件夹的部分。
当在容器内部工作时,如何将容器映像构建或部署到本地 Docker/Kubernetes 安装中?
您可以通过转发 Docker 套接字并在容器中安装 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.com
vscode.blob.core.windows.net
*.vo.msecnd.net
(Azure CDN)
开发容器扩展将在本地下载 VS Code Server,并在连接后将其复制到容器中。
您可以使用“扩展:从 VSIX 安装...”命令在没有 Internet 连接的情况下手动安装扩展,但如果您使用扩展面板或 devcontainer.json
安装扩展,则您的本地计算机和 VS Code Server 将需要与以下地址的出站 HTTPS(端口 443)访问权限:
marketplace.visualstudio.com
*.vo.msecnd.net
(Azure CDN)*.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 文件参考
- 适用于 Windows 的 Docker Desktop 故障排除指南 和 常见问题解答
- 适用于 Mac 的 Docker Desktop 故障排除指南 和 常见问题解答
- Docker 支持资源
我可以在 VS Code 之外使用开发容器吗?
随着容器化生产工作负载变得越来越普遍,开发容器已变得在 VS Code 之外的场景中也很有用。我们正在创建 开发容器规范,以使任何工具中的任何人都能配置一致的开发环境。它旨在寻找方法,以通用的开发特定设置、工具和配置来丰富现有格式,同时仍然提供简化的、非编排的单容器选项,以便它们可以用作编码环境或用于持续集成和测试。
您可以在 containers.dev 上了解更多信息并查看规范,您可以在 GitHub 上的 devcontainers/spec 存储库中查看活跃的提案并为该规范做出贡献。