开发容器(Dev Containers)常见问题解答

本文包含了一些有关在不同环境中启动和运行 Dev Containers 扩展的常见问题。

“开发容器定义”是否定义了应用程序如何部署?

不。开发容器定义了在准备部署之前开发应用程序的环境。虽然部署容器和开发容器可能看起来很相似,但您可能不希望在部署镜像中包含仅在开发期间使用的工具。

devcontainers/templates 仓库包含了一组针对常见开发环境的开发容器定义。如果您更喜欢使用其他容器构建或部署工作流,也可以附加到正在运行的容器,而无需设置开发容器定义。

“开发容器定义”是否定义了应用程序如何构建?类似于 Buildpacks?

不。Buildpacks 的核心概念是通过一系列定义的步骤,将源代码转化为可部署的容器镜像。开发容器则是您在构建应用程序之前进行开发的环境。因此,它们是互补的概念。

尝试将本地文件系统挂载到容器中时出现错误

右键单击 Docker 任务栏图标。在 Windows 上,选择“Settings”(设置)菜单项,然后选择“Resources > File Sharing”(资源 > 文件共享),并勾选存放源代码的驱动器。在 macOS 上,选择“Preferences”(偏好设置)菜单项,然后选择“Resources > File Sharing”(资源 > 文件共享),并确保存放源代码的文件夹位于列表中指定的文件路径下。

有关 Docker for Windows 常见问题的解决方法,请参阅 Docker Desktop for Windows 提示

看到有关缺少库或依赖项的错误

某些扩展依赖于特定 Docker 镜像中不存在的库。例如,Visual Studio Live Share 需要安装系统级依赖项,这些依赖项在他们的文档中列出。对这些依赖项的需求可能取决于您的 Docker 镜像所使用的操作系统(例如特定的 Linux 发行版)。您可能需要在 Docker 构建过程中安装这些依赖项,即通过在 Dockerfile 中添加所需的命令。请搜索特定扩展的文档以检查依赖项,并参阅安装附加软件以获取解决问题的帮助。

可以同时连接到多个容器吗?

一个 VS Code 窗口目前只能连接到一个容器,但您可以打开一个新窗口并附加到已经运行的容器,或者使用带有多个 devcontainer.json 文件的通用 Docker Compose 文件来进一步自动化该过程。

可以在远程主机上使用容器吗?

可以。有关信息,请参阅关于在远程 SSH 主机上打开文件夹在容器中打开远程 Tunnels 主机上的文件夹的相关章节。

在容器内工作时,如何将容器镜像构建或部署到本地 Docker / Kubernetes 安装中?

您可以通过转发 Docker 套接字并在容器中安装 Docker CLI(以及用于 Kubernetes 的 kubectl)来构建镜像和部署容器。有关详细信息,请参阅 Docker outside of DockerDocker outside of Docker ComposeKubernetes-Helm 开发容器定义。

当 VS Code Server 在容器中运行时,对连接性有什么要求?

安装 VS Code Server 要求您的本地计算机能够出站访问 HTTPS(端口 443)至

  • update.code.visualstudio.com
  • vscode.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.comdownload.visualstudio.microsoft.com 下载次要依赖项。其他扩展(如 Visual Studio Live Share)可能有额外的连接要求。如果你遇到问题,请查阅扩展的文档以获取详细信息。

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

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

VS Code 扩展 API 隐藏了大部分远程运行的实现细节,因此许多扩展无需修改即可在开发容器中直接工作。不过,我们建议您在开发容器中测试您的扩展,以确保其所有功能都能按预期运行。详情请参阅关于支持远程开发的文章。

还有哪些资源可以解答我的问题?

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

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

随着生产负载容器化变得普遍,开发容器在 VS Code 之外的场景中也变得非常有用。我们正在制定 开发容器规范(Development Container Specification),旨在让任何人都能在任何工具中配置一致的开发环境。该规范旨在探索如何用通用的开发特定设置、工具和配置来丰富现有格式,同时仍提供一种简化、无需编排的单容器选项,以便它们可以用作编码环境或用于持续集成与测试。

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

© . This site is unofficial and not affiliated with Microsoft.