现已推出!阅读 10 月份的新功能和修复。

开发容器常见问题解答

本文档包括有关在不同环境中启动和运行 开发容器 扩展的一些常见问题。

"开发容器定义" 是否定义了应用程序的部署方式?

不。开发容器定义了在您准备好部署之前开发应用程序的环境。虽然部署和开发容器可能很相似,但您可能不想在部署映像中包含在开发过程中使用的工具。

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 在 Docker 之外Docker 在 Docker Compose 之外 以及 Kubernetes-Helm 开发容器定义,以获取详细信息。

VS Code 服务器在容器中运行时的连接要求是什么?

安装 VS Code 服务器需要您的本地机器具有到以下地址的传出 HTTPS(端口 443)连接

  • update.code.visualstudio.com
  • vscode.blob.core.windows.net
  • *.vo.msecnd.net(Azure CDN)

开发容器扩展会将 VS Code 服务器下载到本地,并在连接后将其复制到容器。

您可以使用扩展:从 VSIX 安装...命令手动安装扩展,而无需互联网连接,但如果您使用扩展面板或 devcontainer.json 来安装扩展,则您的本地机器和 VS Code 服务器需要具有到以下地址的传出 HTTPS(端口 443)访问权限

  • marketplace.visualstudio.com
  • *.vo.msecnd.net(Azure CDN)
  • *.gallerycdn.vsassets.io(Azure CDN)

最后,某些扩展(如 C#)会从 download.microsoft.comdownload.visualstudio.microsoft.com 下载次要依赖项。其他扩展(如 Visual Studio Live Share)可能具有其他连接要求。如果您遇到问题,请查看扩展的文档以获取详细信息。

VS Code 服务器在容器内部的随机端口上运行,VS Code 本身使用 docker exec 通过 Docker 配置的通信通道与其进行通信。

作为扩展作者,我需要做些什么来确保我的扩展能够正常工作?

VS Code 扩展 API 隐藏了大多数远程运行的实现细节,因此许多扩展将在开发容器内部正常工作,无需任何修改。但是,我们建议您在开发容器中测试您的扩展,以确保其所有功能都能按预期工作。请参阅有关 支持远程开发 的文章,以获取详细信息。

还有哪些其他资源可以回答我的问题?

以下文章可能有助于回答您的问题

我可以在 VS Code 之外使用开发容器吗?

随着生产工作负载容器化的日益普遍,开发容器已成为 VS Code 之外场景的有用工具。我们正在创建 开发容器规范,以使任何工具中的任何人都能够配置一致的开发环境。它旨在找到方法,通过常见的开发特定设置、工具和配置来丰富现有格式,同时仍然提供简化的、未编排的单个容器选项 - 这样它们可以作为编码环境或用于持续集成和测试。

您可以在 containers.dev 上了解更多信息并查看规范,您还可以查看 GitHub 上的 devcontainers/spec 存储库中活动的提案并为规范做出贡献。