当前位置:首页 > 文章列表 > 文章 > 软件教程 > VS Code Dev Containers 复用 Features 的开发环境配置

VS Code Dev Containers 复用 Features 的开发环境配置

来源:17golang原创 2026-10-10 12:52:08 0浏览 收藏

要在多个项目或团队成员之间复用 VS Code Dev Containers 的工具链,最简做法是把工具声明放进项目的 .devcontainer/devcontainer.json,通过 features 对象引用可复用的 Dev Container Features。仓库成员执行重开或重建容器后,就会按同一份配置安装 Node.js、GitHub CLI 等工具,不必在每台开发机里重复手工安装。

本文完成后的可见结果是:项目包含可提交版本库的容器配置,VS Code 左下角显示已连接开发容器,重建后声明的工具可以正常查询版本。

VS Code 官方文档:https://code.visualstudio.com/docs/devcontainers/containers

Features 官方索引:https://containers.dev/features

开始前先确认最终状态

Dev Container Feature 是一组可共享的安装脚本与开发容器元数据。它通过 OCI Artifact 形式分发,在 devcontainer.json 中用 Feature ID 引用。这里选择官方维护的三个能力:

  • common-utils:2:常用命令行工具与基础配置。
  • node:2:Node.js 运行时,并通过选项指定工具版本。
  • github-cli:1:GitHub CLI。

冒号后的数字是 Feature 引用的主版本,不等同于工具自身版本;例如 Node.js 的版本放在该 Feature 的 version 选项中。团队要复用配置,应把 .devcontainer 目录与业务代码一起提交,而不是依赖某位成员的全局设置。

第1步:创建项目级容器配置

在项目文件夹已打开的前提下,按 F1 打开命令面板,执行 Dev Containers: Add Dev Container Configuration Files...。随后选择 Add configuration to workspace,再选择一个与项目兼容的基础镜像配置。

如果项目已经存在 .devcontainer/devcontainer.json,不要重新生成;直接执行 Dev Containers: Open Container Configuration File 打开现有文件即可。

Dev Containers 命令面板中添加项目容器配置的原创界面说明
图1:创建 Dev Container 配置的入口操作示意图,界面为原创说明图。

成功状态:资源管理器中出现 .devcontainer 文件夹,里面包含 devcontainer.json。此时先不要急着重建,继续补齐 Features。

第2步:把可复用工具写进 Features

可以按 F1 执行 Dev Containers: Configure Container Features,在列表中搜索并勾选需要的 Feature;也可以直接编辑配置。下面是一份紧凑的项目级写法:

{
  "name": "team-node-workspace",
  // 以稳定的开发容器基础镜像作为工具承载环境
  "image": "mcr.microsoft.com/devcontainers/base:ubuntu",
  "features": {
    // 主版本写在 Feature ID 后,具体选项由该 Feature 定义
    "ghcr.io/devcontainers/features/common-utils:2": {},
    "ghcr.io/devcontainers/features/node:2": {
      // 团队统一使用 Node.js 22,避免成员环境漂移
      "version": "22"
    },
    "ghcr.io/devcontainers/features/github-cli:1": {}
  },
  "customizations": {
    "vscode": {
      // 该扩展会安装到容器侧的 VS Code 环境
      "extensions": ["dbaeumer.vscode-eslint"]
    }
  }
}
Dev Containers Features 列表与配置文件的原创界面说明
图2:选择 Node.js、GitHub CLI 等 Feature 的配置操作示意图,界面为原创说明图。

成功状态:features 节点能获得配置补全,三个 Feature ID 都位于同一个对象中。若通过界面选择,保存后同样会写回配置文件。

第3步:重建容器并等待重新连接

修改 .devcontainer 下的配置后,需要重建才会安装新增 Feature。按 F1,执行 Dev Containers: Rebuild Container。如果当前还没有进入容器,则先执行 Dev Containers: Reopen in Container;首次创建也会按配置构建环境。

重建期间不要再次触发相同命令。完成后,VS Code 会重新打开项目,左下角远程状态区显示开发容器名称,资源管理器仍指向原项目工作区。

Dev Container 重建后远程状态和项目工作区的原创结果说明
图3:容器重建完成后的结果验收示意图,界面为原创说明图。

成功状态:远程状态区显示已连接容器,命令面板可以打开当前容器配置,项目文件可正常编辑。

第4步:核对 Feature 是否真正可用

连接容器后,在 VS Code 集成终端中查询工具版本。下面的命令只是验收,不负责安装;安装来源仍然是 features 配置。

# 确认 Node.js 来自重建后的开发容器环境
node --version

# 确认 GitHub CLI 已由 Feature 安装
gh --version

# 确认常用基础工具可以调用
git --version

验收时不要只看构建结束提示。应同时确认三项:左下角确实处于容器连接状态;版本命令能返回结果;关闭并再次执行 Reopen in Container 后工具仍然存在。这样才能证明配置可复用,而不是某次手工安装残留。

异常时按这张表修正

表现常见原因处理方法复查状态
修改 features 后工具仍不存在只重新加载窗口,没有重建容器执行 Rebuild Container工具版本命令可返回
Feature 拉取失败Feature ID、主版本或容器注册表访问异常对照官方 Features 索引检查引用,并查看 Container Log构建日志不再出现拉取错误
旧工具版本仍保留构建缓存复用了旧层执行 Rebuild Container Without Cache版本与配置选项一致
同事打开后没有自动配置.devcontainer 未提交或打开了错误目录提交配置并让其从仓库根目录打开出现 Reopen in Container 提示
某个 Feature 与基础镜像不兼容发行版、架构或权限条件不满足查看该 Feature 的说明与选项,必要时更换基础镜像重建完成且工具可调用

排查入口统一放在命令面板:执行 Dev Containers: Show Container Log 查看构建与安装记录。不要把敏感令牌直接写进 devcontainer.json;需要认证时使用宿主机凭据转发、环境变量注入或团队既有的密钥管理方式。

把可复用配置归档到仓库

最终提交至少应包含 .devcontainer/devcontainer.json,以及配置引用的 Dockerfile 或 Compose 文件。提交说明中写清基础镜像、Feature ID、关键选项和验收命令。团队升级工具时,优先在分支中修改 Feature 主版本或工具版本选项,重建验收后再合并。

如果某个工具每个项目都需要,可以评估 VS Code 用户设置 dev.containers.defaultFeatures;但它属于个人设置,不能替代仓库内配置。需要团队一致的工具仍应写在项目 features 中。

常见问题

Features 和 Dockerfile 应该怎么选?

可复用的开发工具优先用 Feature;需要精确控制系统包、复制文件或执行复杂构建逻辑时使用 Dockerfile。两者可以同时存在。

能否在多个项目复制同一段 features?

可以。复制 Feature ID 与选项即可复用工具组合,但仍要检查每个项目的基础镜像、CPU 架构和权限条件。

为什么修改 devcontainer.json 后没有立即生效?

配置影响容器构建,需要执行 Rebuild Container。普通的窗口重新加载不会重新安装 Feature。

是否应该一直使用 latest?

团队环境更适合固定 Feature 主版本,并按需要固定工具版本选项。这样既能接受同一主版本内的维护更新,又能避免工具跨大版本变化导致不可预期差异。

用 Features 复用开发环境的核心不是“少写几行安装命令”,而是让工具声明进入版本库,并通过重建、连接状态和版本查询形成可重复的验收闭环。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
iter.Pull2 适配双值迭代器的资源释放iter.Pull2 适配双值迭代器的资源释放
上一篇
iter.Pull2 适配双值迭代器的资源释放
iter.Pull 未关闭造成 goroutine 残留的定位
下一篇
iter.Pull 未关闭造成 goroutine 残留的定位
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • PubMedQA数据集详解:生物医学问答基准、功能与应用指南
    PubMedQA
    深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
    403次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    479次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    489次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    436次使用
  • MMBench详解:多模态大模型基准测试、功能特点与使用指南
    MMBench
    MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
    262次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议 和 隐私政策
返回登录
  • 重置密码