DevContainer 一键搭环境:VS Code 里的可重复开发空间,告别'在我机器上能跑'

概述

你是不是也遇到过这种场景:同事说"代码在我机器上能跑",你拉到本地却一堆报错。Python 版本不对、Node 依赖冲突、系统库缺失——每次配环境都像开盲盒。

Dev Container 就是来解决这个问题的。它把开发环境打包成一个 Docker 容器,里面预装好所有需要的语言、工具、配置。拉下项目,打开文件夹,VS Code 自动进入容器——环境瞬间就绪。

不只是解决"在我机器上能跑"的问题,它还能让团队所有人拥有完全一致的开发环境,新成员入职不需要半天配环境。


准备工作

你需要这些东西:

  • 一台能跑 Docker 的电脑(macOS / Windows / Linux 都行)
  • VS Code 已安装
  • Docker Desktop(macOS/Windows)或 Docker Engine(Linux)
  • 至少 2GB 可用磁盘空间

检查 Docker 是否正常:

docker info

看到 Server Version 就说明 Docker 就绪了。


步骤一:安装 Dev Container 扩展

打开 VS Code,按 Ctrl+Shift+X 打开扩展市场,搜索 Dev Containers,安装 Microsoft 官方出品的那个。

安装完后,左下角会出现一个绿色方块图标,点一下能看到 Dev Containers 相关命令。

验证安装:

# 在 VS Code 中按 Ctrl+Shift+P,输入 "Dev Containers: Install dev container cli"
# 或者命令行检查
code --install-list | grep dev-containers

看到扩展列表里有 ms-vscode-remote.remote-containers 就说明装好了。


步骤二:用示例项目快速体验

先克隆一个官方示例,感受一下 Dev Container 的效果:

git clone https://github.com/microsoft/vscode-dev-containers.git
cd vscode-dev-containers/containers/docker-existing-dockerfile

这个目录里已经有一个现成的 devcontainer.json,我们直接打开:

code .

VS Code 会弹出一个提示框:“Reopen in Container”,点击它。

第一次会比较慢——因为它要拉取基础镜像、安装依赖。等个两三分钟,你会看到左下角变成绿色,说明已经进入容器环境了。

在终端里试一下:

# 容器里应该有这些
python3 --version
node --version
git --version

每个命令都会返回版本号,证明环境已经就绪。


步骤三:在自己的项目里配置 Dev Container

现在来给真实项目写一个 devcontainer.json。在项目根目录创建 .devcontainer/ 文件夹,然后新建 devcontainer.json

{
  "name": "My Dev Environment",
  "image": "mcr.microsoft.com/devcontainers/python:3.12",
  "features": {
    "ghcr.io/devcontainers/features/git:1": {},
    "ghcr.io/devcontainers/features/github-cli:1": {},
    "ghcr.io/devcontainers/features/node:1": {}
  },
  "customizations": {
    "vscode": {
      "extensions": [
        "ms-python.python",
        "ms-python.vscode-pylance",
        "ms-python.black-formatter",
        "esbenp.prettier-vscode"
      ]
    }
  },
  "postCreateCommand": "pip install -r requirements.txt",
  "forwardPorts": [8000, 3000]
}

这个配置做了四件事:

  1. 选定基础镜像python:3.12,自带 Python 3.12 环境
  2. 安装额外工具:Git 和 GitHub CLI
  3. 配置 VS Code 扩展:自动安装 Python、Black 格式化等插件
  4. 容器创建后执行命令:自动安装 requirements.txt 里的依赖

根据你的项目类型,可以换不同的基础镜像:

// Node.js 项目
"image": "mcr.microsoft.com/devcontainers/javascript-node:20"

// Go 项目
"image": "mcr.microsoft.com/devcontainers/go:1.22"

// Rust 项目
"image": "mcr.microsoft.com/devcontainers/rust:1"

// 多语言混合项目(用 Dockerfile)
"dockerfile": "Dockerfile"

步骤四:用自定义 Dockerfile 构建专属环境

如果官方镜像不够用,可以写自己的 Dockerfile:

FROM mcr.microsoft.com/devcontainers/base:ubuntu

# 安装系统依赖
RUN apt-get update && apt-get install -y \
    ffmpeg \
    libpq-dev \
    curl \
    git-lfs \
    && rm -rf /var/lib/apt/lists/*

# 安装特定版本的 Python
RUN apt-get install -y python3.11 python3.11-venv

# 设置默认 Python
ENV PYTHON_VERSION=3.11

然后在 devcontainer.json 里引用:

{
  "build": {
    "dockerfile": "Dockerfile"
  },
  "features": {
    "ghcr.io/devcontainers/features/docker-in-docker:2": {}
  }
}

注意这里加了一个 docker-in-docker 特性,让你在容器里也能用 Docker——适合需要构建镜像的项目。


步骤五:常用操作技巧

重新进入容器

Ctrl+Shift+P → "Dev Containers: Rebuild and Recreate Container"

修改了 devcontainer.json 后,重建镜像就能生效。

在容器里打开终端

左下角绿色图标 → “New Terminal”,这个终端就是在容器内部运行的,所有命令都在隔离环境中执行。

查看容器资源占用

docker stats

Dev Container 本质上就是一个 Docker 容器,所以你可以用所有 Docker 命令管理它。

退出容器回到宿主机

Ctrl+Shift+P → "Dev Containers: Detach From Container"

detach 后容器不会销毁,下次还能接回来。

删除容器释放空间

# 停止并删除所有 dev container
docker rm -f $(docker ps -aq --filter "label=devcontainer.local_folder")
# 清理未使用的镜像
docker image prune -a

验证搭建是否成功

打开一个新项目,创建 devcontainer.json 后:

1. VS Code 右下角弹出 "Reopen in Container" → 点击
2. 等待镜像拉取和容器启动(首次通常 1-3 分钟)
3. 左下角显示绿色图标,说明已进入容器
4. 打开新终端,运行 `which python` 或 `which node`,路径应包含 `/usr` 而非宿主机的路径
5. 运行你的项目,确认依赖全部就绪

如果终端里 echo $CONTAINER 输出 true,那就 100% 确定在容器环境里了。


常见问题

Q1: 第一次启动特别慢怎么办?

基础镜像拉取需要时间,尤其是带 GPU 的镜像。可以在 devcontainer.json 里加 "waitFor": "onStartupCommand" 让 VS Code 等待容器就绪后再打开工作区。

日常使用中,镜像只拉一次。后续打开同一个项目,容器会复用,基本秒开。

Q2: 容器里装的工具,宿主机能用吗?

不能。容器是隔离环境。但好处是——你不需要在宿主机上装任何东西,所有依赖都封装在容器里。换个电脑,只要装了 VS Code 和 Docker,打开项目就是同样的环境。

Q3: 能不能在 WSL 里用 Dev Container?

可以,而且推荐这么做。Windows 用户建议在 WSL 2 里安装 VS Code,然后 Dev Container 直接在 WSL 里运行,性能比 Docker Desktop 好很多。

Q4: 团队项目怎么共享 devcontainer.json?

把它提交到 Git 仓库里。每个成员克隆项目后,VS Code 会自动识别 .devcontainer/devcontainer.json,一键进入统一环境。这是 Dev Container 最大的价值——环境即代码。

Q5: 不支持 VS Code 吗?

Dev Container 也支持 JetBrains 系列 IDE(通过 Gateway)、Eclipse Theia、GitHub Codespaces。GitHub 的代码仓库如果包含 devcontainer.json,可以直接点击 “Code” → “Codespaces” → “Create codespace”,在浏览器里就能跑起来,完全不需要本地装任何东西。


总结

Dev Container 把"配环境"这件事变成了"打开项目"。写好一次 devcontainer.json,团队成员、CI 流水线、不同操作系统都能复用同一个环境定义。

记住三个关键点:

  • 基础镜像选对了,后面只需要加 features 和 extensions
  • postCreateCommand 是自动化依赖安装的最佳位置
  • 提交到 Git 里,环境就是代码的一部分

试试在你的下一个项目里加上 .devcontainer/devcontainer.json——新同事入职配环境的痛苦,从此结束。

这篇文章对你有帮助吗?