开发容器常见问题解答

本文包含了一些常见问题,帮助开发容器扩展在不同环境中运行。

“开发容器定义”是否定义了应用的部署方式?

不。开发容器定义了一个环境,让你在准备部署前开发你的应用。虽然部署和开发容器可能相似,但你可能不想在开发过程中使用的部署镜像中包含工具。

开发容器/模板仓库包含一套适用于一些常见开发环境的开发容器定义。如果你更喜欢使用其他容器构建或部署工作流,也可以直接连接到正在运行的容器,无需设置开发容器定义。

“开发容器定义”是否定义了应用程序的构建方式?比如构建包?

不。构建包的概念侧重于获取源代码并通过一系列定义步骤生成可部署的容器镜像。开发容器是一个环境,让你在准备开发之前就已经开发了你的应用。因此,它们是互补的概念。

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

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

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

我看到一个关于缺失库或依赖的错误

有些扩展依赖于特定 Docker 镜像中没有的库。例如,Visual Studio Live Share需要安装系统级依赖,这些依赖在其文档中列出。这些依赖的需求可能取决于你 Docker 镜像所用的作系统(例如特定的 Linux 发行版)。你可能需要在 Docker 构建过程中安装这些依赖,方法是向你的 Dockerfile 添加所需的命令。搜索该扩展的文档以检查依赖关系,并参见“安装额外软件”以帮助解决问题。

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

VS Code 窗口目前只能连接到一个窗口,但你可以打开一个新窗口并连接到已经运行的容器,或者使用一个通用的 Docker Compose 文件,包含多个devcontainer.json文件让流程更加自动化一些。

我可以在远程主机上作容器吗?

是的,请参见关于在远程SSH主机容器中远程隧道主机上打开文件夹的章节。

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

你可以通过转发 Docker 套接字并在容器中安装 Docker CLI(以及 Kubernetes 的 kubectl)来构建镜像和部署容器。详情请参阅 Docker 外部的 Docker、Docker Compose 之外的 Docker 以及 Kubernetes Helm 开发容器的定义。

当VS Code服务器运行在容器中时,连接需求是什么?

安装VS Code服务器需要您的本地机器具备出站HTTPS(端口443)连接,以实现:

  • update.code.visualstudio.com
  • vscode.download.prss.microsoft.com

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

你可以在没有网络连接的情况下手动安装扩展,使用扩展:从 VSIX 安装......命令,但如果你使用扩展面板或devcontainer.json要安装扩展,您的本地机器和VS Code服务器需要通过HTTPS(端口443)访问以下平台:

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

最后,一些扩展(比如 C#)会从 下载次级依赖download.microsoft.comdownload.visualstudio.microsoft.com.其他软件(如Visual Studio Live Share)可能有额外的连接需求。如果遇到问题,可以查阅扩展的文档获取详细信息。

VS Code 服务器运行在容器内的随机端口上,VS Code 本身使用Docker 执行官通过 Docker 配置的通信通道与它通信。

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

VS Code 扩展 API 隐藏了大部分远程运行的实现细节,所以很多扩展可以在开发容器内运行,无需修改。不过,我们建议你在开发容器中测试扩展,确保其所有功能都能正常运行。详情请参见“支持远程开发”一文。

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

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

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

随着容器化生产工作负载变得普遍,开发容器在VS Code以外的场景中变得非常有用。我们正在创建开发容器规范,旨在赋能任何工具中的任何人配置一致的开发环境。它旨在通过共同的开发专用设置、工具和配置丰富现有格式,同时提供简化且无编排的单一容器选项——以便用作编码环境或持续集成和测试。

你可以在 containers.dev 了解更多并查看规范,也可以在GitHub的开发容器/规范仓库中查看正在进行的提案并贡献规范。