本站点文档内容均翻译自code.visualstudio.com,仅供个人学习,如有差异请以官网为准。

在容器内开发

Visual Studio Code Dev Containers 扩展允许您使用容器作为功能齐全的开发环境。它允许您在容器内打开任何文件夹(或挂载到容器内),并利用 Visual Studio Code 的全部功能。您的项目中的 devcontainer.json 文件 告诉 VS Code 如何访问(或创建)一个 开发容器,该容器包含一个明确的工具和运行时堆栈。这个容器可以用来运行应用程序或隔离用于处理代码库所需的工具、库或运行时。

工作区文件从本地文件系统挂载,或复制或克隆到容器中。扩展在容器内安装和运行,它们可以完全访问工具、平台和文件系统。这意味着,只需连接到不同的容器,您就可以无缝切换整个开发环境。

容器架构

这使得 VS Code 能够提供本地质量的开发体验,包括完整的 Intellisense(代码补全)、代码导航和调试,无论你的工具(或代码)位于何处

The Dev Containers扩展支持两种主要操作模式:

注意:Dev Containers 扩展支持开放的 Dev Containers 规范,这使任何人在任何工具中都能配置一致的开发环境。您可以在我们的开发容器常见问题和规范的网站containers.dev上了解更多信息。

入门指南

注意:您可以在入门 开发容器教程中学习如何快速上手开发容器。

系统要求

本地/远程主机:

您可以通过多种方式使用Docker和Dev Containers扩展,包括:

  • Docker 已在本地安装。
  • 在远程环境中安装了Docker。
  • 其他符合Docker标准的本地或远程安装的CLIs。

您可以在 替代Docker选项文档 中了解更多信息。

以下是一些在本地或远程主机上配置Docker的具体方法:

  • Windows: Docker Desktop 2.0+ 在 Windows 10 Pro/Enterprise。Windows 10 Home (2004+) 需要 Docker Desktop 2.3+ 和 WSL 2 后端。(不支持 Docker Toolbox。不支持 Windows 容器镜像。)
  • macOSDocker Desktop 2.0+。
  • LinuxDocker CE/EE 18.06+ 和 Docker Compose 1.21+。(不支持 Ubuntu snap 包。)
  • 远程主机: 需要1 GB内存,但至少需要2 GB内存和2核CPU。

容器:

  • x86_64 / ARMv7l (AArch32) / ARMv8l (AArch64) Debian 9+,Ubuntu 16.04+,CentOS / RHEL 7+
  • x86_64 阿尔卑斯 Linux 3.9+

其他glibc 基于 Linux 的容器如果它们有 所需的 Linux 先决条件 可能会工作。

安装

要开始,请按照以下步骤操作:

  1. 安装和配置 Docker 适用于您的操作系统,使用以下路径之一或 替代的Docker选项,例如远程主机上的Docker或兼容的CLI。

    Windows / macOS

    1. 安装 Docker Desktop for Windows/Mac.

    2. 如果您在 Windows 上使用 WSL 2,为了确保 WSL 2 后端 被启用:右键单击 Docker 任务栏项目并选择 设置。检查 使用基于 WSL 2 的引擎 并验证您的发行版在 资源 > WSL 集成 下已启用。

    3. 在不使用WSL 2后端时,右键单击Docker任务栏项目,选择设置,并更新资源 > 文件共享,以包含您的源代码的任何位置。参见故障排除提示和技巧

    Linux

    1. 按照 您发行版的官方Docker CE/EE安装说明进行操作。如果您使用Docker Compose,请同时按照 Docker Compose说明进行操作。

    2. 将您的用户添加到Docker通过使用终端运行以下命令进行分组:将用户添加到docker组中:sudo usermod -aG docker $USER

    3. 退出并重新登录以使更改生效。

  2. 安装 Visual Studio CodeVisual Studio Code Insiders.

  3. 安装开发容器扩展。如果你计划在 VS Code 中与其他远程扩展一起工作,你可能选择安装远程开发扩展包

使用Git?

这里有两个建议供你参考:

  • 如果您在Windows本地和容器内使用相同的代码库,请确保设置一致的行尾。查看小贴士和技巧了解详情。
  • 如果你使用Git凭据管理器克隆,你的容器应该已经可以访问你的凭据了!如果你使用SSH密钥,你也可以选择共享它们。详情请见与容器共享Git凭据

选择您的快速开始

本文件包括3个快速入门指南 - 我们建议根据您的工作流程和兴趣选择最适合的一个开始:

  1. 想在快速示例仓库中尝试开发容器吗?查看 快速入门 1:尝试开发容器.
  2. 想为其中一个已本地克隆的项目添加一个开发容器吗?请查看快速入门 2:在容器中打开一个现有文件夹
  3. 想要使用一个隔离的仓库副本工作,即审查PR或调查分支而不影响你的本地工作?查看 快速入门3:在隔离的容器卷中打开一个git仓库或PR

快速开始:尝试开发容器

开始使用最简单的方法是尝试其中一个示例开发容器。 容器教程将引导您设置Docker和开发容器扩展,并允许您选择一个示例:

从列表中选择一个样本

注意:如果你已经安装了 VS Code 和 Docker,那么你可以使用 在开发容器中打开。你可以在 创建开发容器指南 中了解更多关于此及如何将其添加到你的仓库的信息。

快速开始:在容器中打开一个现有的文件夹

本快速入门指南介绍了如何为现有项目设置开发容器,并使用文件系统上的现有源代码作为您的全职开发环境。请按照以下步骤操作:

  1. 启动 VS Code,运行 开发容器:在容器中打开文件夹... 命令从命令面板 (F1) 或快速操作状态栏项目,并选择您希望为容器设置的项目文件夹。

    提示: 如果您希望在打开文件夹之前编辑容器的内容或设置,您可以运行 Dev Containers: 添加开发容器配置文件...

    快速操作 状态栏项目

  2. 现在选择一个开发容器的起点。您可以从筛选列表中选择一个基础开发容器模板,或者使用您选择的文件夹中已存在的DockerfileDocker Compose 文件(如果有的话)。

    注意: 当使用 Alpine Linux 容器时,由于 glibc扩展中原代码的依赖项。

    选择一个节点开发容器模板

    列表将根据您打开的文件夹内容自动排序。

    您可能可以自定义您的开发容器以添加更多功能,您可以在下面了解更多

    显示的 dev container 模板来自我们的 第一方和社区索引,这是 Dev Container Specification的一部分。我们托管了一组作为规范一部分的模板在 devcontainers/templates 仓库中。您可以浏览 将该仓库的文件夹打开以查看每个模板的内容。

    您还可以选择使用dev container CLI发布和分发您自己的开发容器模板。

  3. 在为你的容器选择起始点后,VS Code 将会将 dev container 配置文件添加到你的项目中 (.devcontainer/devcontainer.json)。

  4. VS Code Windows将重新加载并开始构建开发容器。进度通知提供状态更新。您只需在首次打开开发容器时进行构建;首次成功构建后打开文件夹将更快。

    开发容器进度通知

  5. 构建完成后,VS Code将自动连接到容器。

现在,您可以在 VS Code 中与项目进行交互,就像在本地打开项目时一样。从现在开始,当您打开项目文件夹时,VS Code 会自动检测并重新使用您的开发容器配置。

提示: 想要使用远程Docker主机吗?请参阅 在容器中打开远程SSH主机上的文件夹 部分获取更多信息。

虽然使用这种方法将挂载本地文件系统到容器中是方便的,但在Windows和macOS上确实会有一些性能开销。有一些技术可以用来提高磁盘性能,或者您可以使用隔离的容器卷在容器中打开一个存储库

在 Windows 上于容器中打开 WSL 2 文件夹

如果您正在使用 Windows Subsystem for Linux v2 (WSL 2) 并且已启用 Docker Desktop 的 WSL 2 后端,您可以处理存储在 WSL 中的源代码!

一旦启用WSL 2引擎,您可以:

  • 使用 Dev Containers: 在容器中重新打开 命令,从已经使用 WSL 扩展打开的文件夹。
  • 选择 开发容器:在容器中打开文件夹... 从命令面板 (F1) 中选择一个WSL文件夹,使用本地 \\wsl$共享(来自Windows侧)。

其余的快速入门内容照常适用!您可以在其文档中了解更多关于WSL扩展的信息.

在容器中打开远程 SSH 主机上的文件夹

如果您正在使用 Linux 或 macOS SSH 主机,您可以同时使用 Remote - SSH 和 Dev Containers 扩展。您甚至不需要在本地安装 Docker 客户端。

要这样做:

  1. 按照安装和SSH主机设置步骤进行Remote - SSH扩展的设置。
  2. 可选: 设置 SSH 基于密钥的认证 到服务器,这样你就不需要多次输入密码。
  3. 安装Docker在你的SSH主机上。你不需要在本地安装Docker。
  4. 按照快速入门指南,使用Remote - SSH扩展连接到主机并打开一个文件夹。
  5. 使用 开发容器:在容器中重新打开 命令从命令面板 (F1, ⇧⌘P (Windows, Linux Ctrl+Shift+P))。

其余的 Dev Containers 快速入门可直接应用。您可以阅读其文档以了解更多关于 Remote - SSH 扩展的信息。您还可以查看 在远程 Docker 主机上开发 文章以获取其他选项,如果此模型无法满足您的需求。

在容器中打开远程Tunnel主机上的文件夹

您可以将Remote - Tunnels和Dev Containers扩展一起使用,以在远程主机上的容器内打开文件夹。您甚至不需要在本地安装Docker客户端。这类似于上面的SSH主机场景,但使用的是Remote - Tunnels。

要这样做:

  1. 按照入门说明进行Remote - Tunnels扩展。
  2. 安装Docker在你的隧道主机上。你不需要在本地安装Docker。
  3. 按照步骤使用Remote - Tunnels扩展连接到隧道主机并打开一个文件夹。
  4. 使用 开发容器:在容器中重新打开 命令从命令面板 (F1, ⇧⌘P (Windows, Linux Ctrl+Shift+P))。

其余的Dev Containers快速入门可以直接应用。您可以阅读其文档以了解更多关于Remote - Tunnels扩展的信息。您还可以查看在远程Docker主机上开发的文章,以获取其他选项,如果此模型不能满足您的需求。

在容器中打开现有的工作区

您还可以按照类似的步骤打开一个VS Code 多根工作区单个容器中,如果工作区只引用该文件夹的子文件夹的相对路径代码工作区文件在(或文件夹本身)。

您可以:

  • 使用 开发容器:在容器中打开工作区... 命令。
  • 使用 文件 > 打开工作区... 一旦你打开一个包含 代码工作区文件在容器中。

一旦连接,您可能希望添加.devcontainer 文件夹 添加到工作区,以便您可以轻松编辑其内容(如果尚未显示的话)。

请注意,虽然在同一个 VS Code Windows中,您不能为同一个工作区使用多个容器,但您可以从不同的Windows同时使用多个由Docker Compose管理的容器

快速开始:在隔离的容器卷中打开一个Git仓库或GitHub PR

虽然你可以在容器中打开一个本地克隆的仓库,但你可能希望为PR审查或调查其他分支时不受影响而工作于一个仓库的隔离副本。

代码库容器使用隔离的、本地的Docker卷,而不是绑定到本地文件系统。除了不污染你的文件树之外,本地卷在Windows和macOS上还具有性能改进的额外好处。(参见高级配置提高磁盘性能文章了解如何在其他场景中使用这些类型的卷。)

例如,按照以下步骤在“仓库容器”中打开一个“尝试”仓库:

  1. 启动 VS Code 并运行 开发容器:在容器卷中克隆仓库... 从命令面板 (F1)。

  2. 输入microsoft/vscode-remote-try-node(或其他“尝试”仓库之一),在出现的输入框中输入一个Git URI、一个GitHub分支URL或一个GitHub PR URL,然后按Enter

    输入框中包含仓库名称

    提示: 如果你选择了一个私有仓库,你可能需要设置一个凭证管理器或在你的SSH代理中添加你的SSH密钥。请参阅 与容器共享Git凭证

  3. 如果您的仓库没有一个.devcontainer/devcontainer.json 文件中,您将被要求从可过滤的列表中选择一个起点或一个现有的 DockerfileDocker Compose 文件(如果存在的话)。

    注意: 当使用 Alpine Linux 容器时,由于 glibc扩展中原代码的依赖项。

    选择一个节点开发容器模板

    列表将根据您打开的文件夹内容自动排序。显示的dev container Templates来自我们的第一方和社区索引,这是Dev Container Specification的一部分。我们托管了一组作为规范一部分的 Templates在devcontainers/templates 仓库中。您可以浏览将该仓库的文件夹打开以查看每个模板的内容。

  4. VS Code Windows(实例)将重新加载,克隆源代码,并开始构建开发容器。进度通知提供状态更新。

    开发容器进度通知

    如果你在步骤2中粘贴了GitHub拉取请求的URL,系统将自动检出该PR,并且GitHub Pull Requests扩展将安装在容器中。该扩展提供了额外的PR相关功能,例如PR浏览器、在原地与PR评论互动以及状态栏可见性。

    状态栏中的 PR 状态

  5. 构建完成后,VS Code将自动连接到容器。现在,您可以在这个独立的环境中处理代码仓库的源代码,就像您在本地克隆了代码一样。

请注意,如果容器由于Docker构建错误等无法启动,您可以选择在恢复容器中重新打开,在弹出的对话框中进入允许您编辑Dockerfile或其他内容的“恢复容器”。这将在一个最小容器中打开带有克隆仓库的docker volume,并显示创建日志。一旦您完成修复,请使用在容器中重新打开进行重试。

提示: 想要使用远程Docker主机吗?请参阅 在容器中打开远程SSH主机上的文件夹 部分获取更多信息。

信任你的工作空间

Visual Studio Code非常重视安全性,并希望帮助您安全地浏览和编辑代码,无论其来源或原始作者是谁。 工作区信任功能 让您决定项目文件夹是否应该允许或限制自动代码执行。

Dev Containers 扩展已采用 Workspace Trust。根据您如何打开和与源代码进行交互,您将在不同的时间点被提示决定是否信任您正在编辑或执行的代码。

在容器中重新打开文件夹

为现有项目设置开发容器需要信任本地(或WSL)文件夹。在Windows重新加载之前,您将被要求信任本地(或WSL)文件夹。

有一些例外情况:

  1. 点击最近的条目。
  2. 使用 在容器中打开文件夹 命令将在Windows重新加载后询问信任,如果尚未授予信任。

附加到现有容器

附加到一个现有的容器时,系统会要求您确认附加意味着您信任该容器。这只会确认一次。

附加到容器时的工作区信任提示

在卷中克隆仓库

在容器卷中克隆仓库时,系统会要求您确认克隆仓库意味着您信任该仓库。这只会确认一次。

在容器卷克隆时出现工作区信任提示

检查卷

检查卷 开始于 受限模式,您可以信任容器内的文件夹。

Docker守护进程正在远程运行

这意味着信任运行Docker守护进程的机器。没有额外的提示来确认(只有上面列出的本地/WSL情况的提示)。

创建一个devcontainer.json文件

VS Code 的容器配置存储在 devcontainer.json 文件中。这个文件类似于 launch.json用于调试配置的文件,但用于启动(或附加到)你的开发容器。你也可以指定在容器运行时安装的任何扩展或创建后要准备环境的命令。开发容器配置位于.devcontainer/devcontainer.json或存储为.devcontainer.json在项目根目录下的文件(注意点前缀)。

选择Dev Containers: 添加Dev Container配置文件...命令从命令面板 (F1) 中将为您的项目添加所需文件作为起点,您可以根据需要进一步自定义。该命令允许您从基于文件夹内容的列表中选择预定义的容器配置,重新使用现有的Dockerfile,或重新使用现有的Docker Compose文件。

选择一个节点开发容器模板

你也可以手动创建一个devcontainer.json,并使用任何镜像、Dockerfile或Docker Compose文件集作为起点。以下是一个简单的例子,使用其中一个预构建的开发容器镜像

{
  "image": "mcr.microsoft.com/devcontainers/typescript-node",
  "forwardPorts": [3000],
  "customizations": {
    // 配置 VS Code 特定的属性。
    "vscode": {
      // 添加您希望在容器创建时安装的扩展的 ID。
      "extensions": ["streetsidesoftware.code-spell-checker"]
    }
  }
}

注意: 额外的配置将根据基础镜像中的内容添加到容器中。例如,我们添加了街道边软件.代码拼写检查器扩展部分上,并且容器也将包括"dbaeumer.vscode-eslint" 作为 那是 mcr.microsoft.com/devcontainers/typescript-node. 这在使用 时会自动发生devcontainer.json,您可以在预构建部分了解更多。

了解更多关于创建devcontainer.json 文件,请参见 创建开发容器

开发容器特性

开发容器“Features”是自包含、可共享的安装代码和开发容器配置单元。名称来源于引用其中一个可以让你快速轻松地将更多的工具、运行时或库“Features”添加到你的开发容器中,以便你或你的合作者使用。

当你使用开发容器:添加开发容器配置文件时,会显示一系列脚本以定制现有的开发容器配置,例如安装Git或Azure CLI:

开发容器功能列表下拉菜单

当你在容器中重建并重新打开时,你选择的功能将会在你的devcontainer.json输入:

"特性": {
    "ghcr.io/devcontainers/特性/github-cli:1": {
        "版本": "最新"
    }
}

编辑时,您将获得智能感知"功能"物业在devcontainer.json直接:

修改地形特征时的智能感知

Dev Containers: 配置容器功能命令允许您更新现有的配置。

VS Code UI 中的特性现在来自一个中央索引,您也可以为此做出贡献。请参阅Dev Containers 规范网站了解当前的列表,并了解如何发布和分发特性

“始终安装”的功能

类似于您可以设置扩展始终安装在您的开发容器中,您可以使用

dev.containers.defaultFeatures
  • 在 VS Code 中打开
  • 在 VS Code Insiders 中打开
用户 设置 来设置您总是希望安装的功能:

"dev.containers.defaultFeatures": {
    "ghcr.io/devcontainers/features/github-cli:1": {}
},

创建你自己的功能

创建和发布您自己的 Dev Container Features 也很简单。发布的 Features 可以存储并作为 OCI Artifacts 从任何支持的公共或私有容器注册表中共享。您可以在 containers.dev 上查看当前发布的 Features 列表。

功能是一个自包含实体,位于至少一个文件夹中。devcontainer-feature.jsoninstall.sh入口脚本:

+-- 功能
|    +-- devcontainer-feature.json
|    +-- install.sh
|    +-- (其他文件)

查看 功能/启动器 仓库以获取使用 dev container CLI 发布您自己的公共或私有功能的说明。

功能规范和分布

功能是开源 开发容器规范的关键部分。您可以查看 更多关于功能如何工作及其 分发的信息

预构建开发容器镜像

我们建议使用工具预先构建镜像,而不是每次在开发容器中打开项目时都创建和构建容器镜像。使用预构建的镜像将导致容器启动更快、配置更简单,并允许您固定到特定版本的工具,以提高供应链安全性并避免潜在的中断。您可以通过使用像 GitHub Actions 这样的 DevOps 或持续集成 (CI) 服务来自动预构建您的镜像,从而通过安排构建来实现这一点。

更好的是 - 预构建的镜像可以包含开发容器元数据,因此当您引用镜像时,设置将自动拉取。

我们建议使用Dev Container CLI(或支持规范的其他工具,例如GitHub Action)来预构建你的镜像,因为它会与Dev Containers扩展的最新功能保持同步,包括开发容器功能。一旦你构建了你的镜像,你可以将其推送到容器注册表(如Azure Container RegistryGitHub Container RegistryDocker Hub)并直接引用它。

您可以使用 devcontainers/ci 仓库中的 GitHub Action 来帮助您在工作流程中重用开发容器。

前往 预构建镜像的 dev container CLI 文章 了解更多信息。

继承元数据

您可以通过图像标签将Dev Container配置和Feature元数据包含在预构建的图像中。这使得图像自包含,因为当图像被引用时,这些设置会自动被拾取 - 无论是否直接在在引用的Dockerfile中,或在Docker Compose文件中。这有助于防止你的开发容器配置和镜像内容出现不一致,并允许你通过简单的镜像引用将同一配置更新推送到多个仓库。

此元数据标签是自动添加的,当您使用Dev Container CLI(或支持该工具的其他规范,如GitHub ActionAzure DevOps 任务)进行预构建时,并包含来自devcontainer.json以及任何引用的开发容器功能。

这使您可以拥有一个单独的更复杂的 devcontainer.json 你通常会预先构建你的镜像,然后一个显著地 简化的镜像 在一个或多个仓库中。镜像的内容将与这个简化的 devcontainer.json 在创建容器时的内容(请参阅 规范 了解合并逻辑)。但最简单的情况下,你可以在 直接引用镜像。devcontainer.json为了使设置生效:

{
  "image": "mcr.microsoft.com/devcontainers/go:1"
}

请注意,您也可以选择手动将元数据添加到图像标签中。即使您没有使用Dev Container CLI进行构建,这些属性也会被识别(即使您使用了CLI,也可以通过CLI进行更新)。例如,考虑以下Dockerfile片段:

Tab devcontainer.metadata='[{ \
  "capAdd": [ "SYS_PTRACE" ], \
  "remoteUser": "devcontainer", \
  "postCreateCommand": "yarn install" \

检查卷

偶尔你可能会遇到一种情况,即你在使用一个名为 volume 的 Docker 卷,你想检查或更改它。你可以使用 VS Code 来操作这些内容,而无需创建或修改devcontainer.json 通过选择 开发容器:在开发容器中探索一个卷... 来自命令面板 (F1)。

你也可以在远程资源管理器中检查你的卷。确保在下拉菜单中选择了容器,然后你会看到一个开发卷部分。你可以右键点击一个卷来检查它的创建信息,例如卷何时创建,克隆到其中的仓库以及挂载点。你也可以在开发容器中浏览它。

在远程资源管理器中右键单击开发卷

如果您已安装容器工具扩展,您可以在部分的容器资源管理器中右键单击一个卷并选择在开发容器中浏览

在 Container Tools 上下文菜单中探索开发容器

管理扩展

VS Code 在两个地方之一运行扩展:本地在用户界面/客户端,或在容器中。 影响 VS Code 用户界面的扩展(如主题和片段)安装在本地,而大多数扩展将位于特定容器内。 这允许您仅在容器中安装完成特定任务所需的扩展,并通过连接到新的容器无缝切换整个工具链。

如果您从扩展视图中安装一个扩展,它将自动安装在正确的位置。您可以通过类别分组来判断扩展安装在哪里。本地 - 已安装类别以及一个为您容器的类别。

工作区扩展类别

本地扩展类别

注意: 如果你是扩展作者,并且你的扩展无法正常工作或安装在错误的位置,请参阅支持远程开发 了解详细信息。

需要在远程运行的本地扩展将出现在禁用类别中本地 - 已安装。选择安装以在您的远程主机上安装扩展。

禁用的扩展(带有安装按钮)

您还可以通过转到扩展视图并选择在开发容器中安装本地扩展: {Name},使用本地 - 已安装标题栏右侧的云按钮来安装所有在开发容器中本地安装的扩展。这将显示一个下拉菜单,您可以从中选择要安装在容器中的本地扩展。

安装所有扩展

然而,某些扩展可能需要你安装额外的软件在容器中。如果你遇到问题,请查阅扩展文档以获取详细信息。

在devcontainer.json中添加扩展

虽然你可以手动编辑你的devcontainer.json文件来添加一个扩展ID列表,你也可以在扩展视图中右键点击任意扩展并选择添加到devcontainer.json

添加到devcontainer.json菜单

选择不使用扩展

如果基础镜像或功能配置了您不希望在开发容器中安装的扩展,您可以使用减号列出该扩展以选择退出。例如:

{
  "image": "mcr.microsoft.com/devcontainers/typescript-node:1-20-bookworm",
  "customizations": {
    "vscode": {
      "extensions": ["-dbaeumer.vscode-eslint"]
    }
  }
}

“始终安装”的扩展程序

如果你希望在任何容器中总是安装一些扩展,你可以更新

dev.containers.defaultExtensions
  • 在 VS Code 中打开
  • 在 VS Code Insiders 中打开
用户 设置。例如,如果你想安装 GitLens资源监视器 扩展,你将如下指定它们的扩展 ID:

"dev.containers.defaultExtensions"
    "eamodio.gitlens"
    "mutantdino.resourcemonitor"
]

高级:强制扩展在本地或远程运行

扩展程序通常被设计和测试为要么本地运行,要么远程运行,但不能两者都支持。然而,如果扩展程序支持,你可以强制它在你指定的某个位置运行。settings.json文件。

例如,下面的设置将强制Container Tools扩展在本地运行Remote - SSH: 编辑配置文件扩展远程运行,而不是它们的默认值:

"remote.extensionKind": {
    "ms-azuretools.vscode-containers": [ "ui" ],
    "ms-vscode-remote.remote-ssh-edit": [ "workspace" ]
}

一个值"ui"而不是"工作区" 将强制在本地UI/客户端上运行扩展。通常,除非扩展文档中另有说明,否则仅应在此情况下使用,因为它 可能会破坏扩展。请参阅 首选扩展位置 一节了解详细信息。

转发或发布端口

容器是独立的环境,所以如果你想要访问容器内的服务器、服务或其他资源,你需要将端口“转发”或“发布”到你的主机。你可以配置容器总是暴露这些端口,或者只是临时转发它们。

总是转发端口

您可以指定一个端口列表,当通过始终在容器中附加或打开文件夹时,您希望转发这些端口转发端口物业在devcontainer.json输入:.

"forwardPorts"30003001]

只需重新加载/重新打开Windows,当 VS Code 连接到容器时,设置将被应用。

暂时转发端口

如果您需要访问未添加到的端口devcontainer.json或在你的Docker Compose文件中发布,你可以临时转发一个新的端口在会话期间通过运行转发端口命令从命令面板 (F1)。

前向端口输入

选择端口后,系统会通知您在容器中访问该端口应使用的本地主机端口。例如,如果您转发了一个监听3000端口的HTTP服务器,通知可能会告诉您它在本地主机上被映射到4123端口。然后,您可以使用以下方式连接到这个远程HTTP服务器:http://localhost:4123输入:.

同样的信息也可以在转发端口部分找到,如果你以后需要访问它。

如果您希望 VS Code 记住您已转发的任何端口,请在设置编辑器中勾选 远程:恢复已转发的端口 (⌘, (Windows, Linux Ctrl+,)) 或设置 "remote.restoreForwardedPorts": truesettings.json输入:.

恢复转发端口设置

发布端口

Docker在容器创建时具有“发布”端口的概念。发布的端口与您为本地网络提供可用端口的行为非常相似。如果您的应用程序仅接受来自本地主机它将像你的本地机器对网络调用一样,拒绝来自发布端口的连接。另一方面,转发的端口实际上看起来像本地主机到应用程序。每个在不同的情况下都有用。

要发布一个端口,您可以:

  1. 使用appPort属性: 如果您在devcontainer.json,你可以使用应用端口将属性发布到主机的端口。

    "appPort": [ 3000, "8921:5000" ]
    
  2. 使用Docker Compose端口映射: 端口映射 可以轻松地添加到你的 docker-compose.yml发布附加端口的文件。

    端口:
    - "3000"
    - "8921:5000"
    

在每种情况下,您都需要重建容器才能使设置生效。您可以通过在命令面板(F1)中运行命令“Dev Containers: Rebuild Container”来实现这一点,前提是您已经连接到容器。

打开终端

在 VS Code 中从容器中打开终端非常简单。一旦你在容器中打开一个文件夹,任何在 VS Code 中打开的终端Windows终端 > 新建终端)将自动在容器中运行,而不是在本地运行。

您还可以使用代码从同一个终端Windows使用命令行执行一些操作,例如在容器中打开新的文件或文件夹。输入代码 --help要了解从命令行中有哪些可用选项。

使用代码 CLI

在容器中调试

一旦你在容器中打开一个文件夹,你就可以像在本地运行应用程序时一样使用 VS Code 的调试器。例如,如果你在选择一个 launch 配置时launch.json 并开始调试 (F5),应用程序将在远程主机上启动并附加调试器。

请参阅调试文档,了解在中配置 VS Code 调试功能的详细信息.vscode/launch.json输入:.

容器特定设置

当您连接到开发容器时,VS Code 的本地用户设置也会被重复使用。虽然这保持了您的用户体验一致性,但您可能希望在您的本地机器和每个容器之间更改其中的一些设置。幸运的是,一旦您连接到一个容器,您还可以通过在命令面板(F1)中运行 偏好设置:打开远程设置 命令或选择设置编辑器中的 远程 选项卡来设置特定于容器的设置。这些设置将覆盖您连接到容器时的任何本地设置。

容器特定设置标签页

默认容器特定设置

您可以在 中包含容器特定设置的默认值devcontainer.json使用设置属性。这些值将自动放置在容器特定的设置文件中,该文件将在容器创建后位于容器内。

例如,将此添加到.devcontainer/devcontainer.json将设置Java home路径:

// 配置特定工具的属性。
"自定义设置": {
    // 配置 VS Code 特定的属性。
    "vscode": {
        "设置": {
            "java.home": "/docker-java-home"
        }
    }
}

由于这只是设置默认值,因此在创建容器后,您仍然可以按需更改设置。

管理容器

默认情况下,Dev Containers 扩展会自动启动在 devcontainer.json当你打开文件夹时。当你关闭 VS Code 时,扩展会自动关闭你已连接的容器。你可以通过添加来更改此行为"shutdownAction": "none"devcontainer.json输入:.

虽然您可以使用命令行来管理容器,但您也可以使用 远程资源管理器。要停止容器,请从下拉菜单中选择容器(如果存在),右键单击一个正在运行的容器,并选择停止容器。您还可以启动已退出的容器、删除容器以及删除最近的文件夹。在详细信息视图中,您可以转发端口并在浏览器中打开已转发的端口。

容器探索者截图

如果您想清理图像或批量删除容器,请参阅清理未使用的容器和图像以获取不同选项。

使用 dotfile 仓库进行个性化设置

Dotfiles 是以点开头的文件输入:.) 并且通常包含各种应用程序的配置信息。由于开发容器可以涵盖各种各样的应用类型,因此将这些文件存储在某个地方可能会很有用,这样你就可以在容器启动并运行后轻松将其复制到容器中。

一种常见的方法是将这些 dotfiles 存储在 GitHub 仓库中,然后使用工具进行克隆和应用。Dev Containers 扩展具有内置支持,可以与您自己的容器一起使用这些 dotfiles。如果您是这个想法的新手,请查看不同的dotfiles 克隆仓库

要使用它,请将您的 dotfiles GitHub 仓库添加到 VS Code 的用户设置中 (⌘, (Windows, Linux Ctrl+,)) 如下所示:

点文件设置

或者在settings.json输入:

{
  "dotfiles.repository": "你的-github-id/你的-dotfiles-repo",
  "dotfiles.targetPath": "~/dotfiles",
  "dotfiles.installCommand": "install.sh"
}

从现在开始,每当创建一个容器时,都会使用 dotfiles 仓库。

已知限制

开发容器限制

  • Windows 容器镜像支持。
  • 在多根工作区中,所有根/文件夹将被打开在同一个容器中,无论较低级别是否存在配置文件。
  • 非官方的 Ubuntu Docker snap 包在 Linux 上 受支持。请按照 官方 Docker 安装说明进行操作
  • Docker Toolbox 在 Windows 上不受支持。
  • 如果你通过 SSH 克隆一个 Git 仓库,并且你的 SSH 密钥有密码,VS Code 的拉取和同步功能在远程运行时可能会卡住。可以使用没有密码的 SSH 密钥,或者使用 HTTPS 克隆,或者运行git 推送从命令行解决此问题。
  • 本地代理设置在容器内不会被重新使用,除非配置了适当的代理信息(例如全局代理信息),否则扩展可能无法正常工作。HTTP代理HTTPS_PROXY设置环境变量以包含适当的代理信息。
  • 在Windows上,当ssh-agent使用版本<=8.8而SSH客户端(在任何平台上)使用版本>=8.9时,OpenSSH版本之间存在不兼容问题。解决方法是将Windows上的OpenSSH升级到8.9或更高版本,使用winget或从Win32-OpenSSH/releases获取安装程序。(注意ssh-add -l将正常工作,但是ssh 将会失败<ssh-server>: 拒绝访问 (公钥)这也会在使用 SSH 连接到仓库时影响 Git。

此处了解与容器相关的活跃问题列表

Docker 限制

请参阅Docker故障排除指南WindowsMac以获取更多信息。

容器工具扩展限制

如果您正在从WSL、Remote - Tunnels或Remote - SSHWindows使用Container Tools或Kubernetes扩展,使用附加Visual Studio Code上下文菜单操作在Container Explorer或Kubernetes视图中将再次询问您选择可用容器。

扩展限制

到目前为止,大多数扩展在开发容器中无需修改即可使用。然而,在某些情况下,某些功能可能需要更改。如果您遇到扩展问题,请参阅此处总结了常见问题及其解决方案,在报告问题时可以向扩展作者提及。

此外,虽然 Alpine 支持可用,但容器中安装的一些扩展可能由于glibc 扩展中本地代码的依赖项。请参阅 使用 Linux 进行远程开发 文章了解详细信息。

高级容器配置

请参阅高级容器配置文章,了解以下主题的信息:

devcontainer.json 参考

有一个完整的devcontainer.json 参考,您可以在此处查看文件模式,以帮助您自定义开发容器并控制如何连接到正在运行的容器。

问题或反馈

故障排除

无法写入文件(没有权限 (FileSystemError))

您可能在以下配置中运行开发容器时遇到此问题:

  • Docker Desktop 通过 Windows Subsystem for Linux (WSL) 后端运行
  • 增强型容器隔离 (ECI) 已启用

检查 问题 #8278 以获取可能的解决方法。

下一步