VSCode 的 Dev Container 配置 Docker 容器中运行 Claude Code

✨ 文章记录了在 Docker 容器中运行 AI Coding Agent(如 Claude Code)以提高安全性的方法。由于 AI Agent 可能存在绕过安全限制执行危险操作的风险,文章强调了沙盒(Sandbox)的重要性,并介绍了如何利用 VSCode 的 Dev Container 配置 Docker 环境来隔离 Claude Code,从而限制其对宿主机的访问和潜在破坏。

最近 AI Coding 工具使用的多,Gemini CLI 免费,Claude Code 高效,用起来体验确实不错。
并且可以两者搭配起来:让 Claude Code 来负责制定编码计划, 拆分计划,并调用 Gemini CLI 利用其超长的上下文来进行迭代处理,最后再由 Claude Code 来完成细节优化以及 Code Review 并修复 BUG。

安全隐患

工具用起来一时爽,但是这样直接在设备上运行一个可以控制整个操作系统、访问完整文件系统的 AI Agent 还是有风险的。

虽然这类工具会在每次执行操作前进行询问批准确认(这种每次都审核确认的方案确实有效),但人总会有误操或者想偷懒的时候,或者是图省事直接用 YOLO(You Only Look Once)模式完全交给 AI Agent,这些场景下未知命令/脚本/代码的执行就带来了一些安全隐患,难免会出问题。

比如下面这篇帖子中就提到了 Claude 模型能够绕过用户设置的命令黑名单,通过创建并运行脚本来执行被禁止的命令,例如 rm。

https://forum.cursor.com/t/important-claude-has-learned-how-to-jailbreak-cursor/96702/2?ref=timsh.org

Sandbox

随着我们给到 AI 模型 / AI Agent 的权限越来越大,相应的所面临的像上文提及的安全风险和攻击手段也会越来越多, Sandbox 自然而然地成为 AI Agent 发展中一个重要的项目。

Gemini CLI 中就有 Sandbox 相关的配置项,其中明确提到 Sandbox 功能用于隔离潜在危险操作,提升安全性和环境一致性。

https://github.com/google-gemini/gemini-cli/blob/main/docs/sandbox.md

如何创建更高效安全的适用于 AI Agent 的 Sandbox 环境此处不做展开。

当前为了隔离限制 AI Agent,Docker 就是最直接的选择。把这些 AI Agent 全部放进容器内,使其只能访问到容器内部以及手动挂载上去的文件,而且它也无法对宿主机造成破坏,顶多就是容器异常而停止运行。

Docker & VSCode

下面是基于 VSCode 的 Dev Container 来配置 Docker 容器的记录,简短且简单。

mkdir -p ~/work-dir/claude-code/.devcontainer

touch devcontainer.json

先创建一个文件夹,之后这个文件夹会被作为 Claude Code 和项目的根目录。再在此文件夹下创建一个名为 .devcontainer 的文件夹,并在其中创建一个 devcontainer.json 文件。

devcontainer.json 文件内容如下(以 Golang 项目为例,采用了 go 的基础镜像):

{
  "name": "Claude Code Dev Container",
  "image": "mcr.microsoft.com/devcontainers/go:1.24",
  "features": {
    "ghcr.io/devcontainers/features/node:1": {
      "version": "lts"
    }
  },
  "postCreateCommand": "npm install -g @anthropic-ai/claude-code",
  "customizations": {
    "vscode": {
      "extensions": [
        "golang.Go"
      ]
    }
  },
  "remoteUser": "vscode"
}

在 VSCode 中打开 ~/work-dir/claude-code 目录,点击左下角图标,然后在上方中央弹出的选项中选择 ”Reopen in Container“ 并等待容器启动即可。

一切启动后,可以在终端执行 claude 命令来使用 Claude Code 了。