Dev Containers 常见问题解答

本文包括在不同环境中启动并运行Dev Containers扩展的一些常见问题。

“ Dev Containers 定义”是否定义了应用程序的部署方式?

不会。 Dev Containers 定义了您在准备部署之前开发应用程序的环境。虽然部署和 Dev Containers 可能彼此相似,但您可能不希望在开发期间使用的部署映像中包含工具。

devcontainers /templates 存储库包含一组适用于某些常见开发环境的 Dev Containers 定义。如果您更喜欢使用备用容器构建或部署工作流程,您还可以附加到正在运行的容器,而无需设置 Dev Containers 定义。

“ Dev Containers 定义”是否定义了应用程序的构建方式?喜欢构建包吗?

不会。Buildpacks概念的重点是通过一系列定义的步骤获取源代码并生成可部署的容器映像。 Dev Containers 是一个环境,您可以在准备构建之前在其中开发应用程序。因此它们是互补的概念。

我在尝试将本地文件系统挂载到容器中时看到错误

右键单击 Docker 任务栏项目。在 Windows 上,选择“设置”菜单项,然后选择“资源”>“文件共享”,然后检查源代码所在的驱动器。在 macOS 上,选择“首选项”菜单项,然后选择“资源”>“文件共享”,并确保包含源代码的文件夹位于列表中指定的文件路径下。

有关适用于 Windows 的常见 Docker 问题的解决方法的信息,请参阅适用于 Windows的 Docker Desktop 提示

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

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

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

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

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

是的,请参阅有关在容器中打开远程 SSH 主机或远程隧道主机上的文件夹的部分以获取信息。

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

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

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

安装 VS Code Server 要求您的本地计算机具有到以下位置的出站 HTTPS(端口 443)连接:

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

Dev Containers 扩展将在本地下载 VS Code Server,并在连接后将其复制到容器中。

您可以使用“扩展:从 VSIX... 安装”命令在没有 Internet 连接的情况下手动安装扩展,但如果您使用扩展面板或devcontainer.json安装扩展,您的本地计算机和 VS Code 服务器将需要出站 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 服务器在容器内的随机端口上运行,VS Code 本身docker exec通过 Docker 配置的通信通道与其进行通信。

作为扩展作者,我需要做什么才能确保我的扩展有效?

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

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

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

我可以在 VS Code 之外使用 Dev Containers 吗?

随着生产工作负载容器化变得越来越普遍, Dev Containers 对于 VS Code 之外的场景也变得非常有用。我们正在创建 Dev Containers 规范,以使任何人能够使用任何工具配置一致的开发环境。它寻求找到方法,通过通用的开发特定设置、工具和配置来丰富现有格式,同时仍然提供简化的、未经编排的单一容器选项,以便它们可以用作编码环境或用于持续集成和测试。

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