Claude Code 提供官方 Dev Container 参考实现,为需要一致、安全环境的团队提供开箱即用的隔离开发环境,支持在容器内使用 --dangerously-skip-permissions 无人值守运行。
为什么需要 Dev Container
| 场景 | Dev Container 的价值 |
|---|---|
| 无人值守 CI/CD | 在容器隔离环境中安全使用 --dangerously-skip-permissions |
| 客户项目隔离 | 不同客户的代码和凭证完全隔离,互不泄漏 |
| 团队统一环境 | 新成员几分钟内获得完整配置的开发环境 |
| CI/CD 一致性 | 开发和生产环境使用相同的容器配置 |
⚠️ 即使 Dev Container 提供了大量保护,也不能防止所有攻击。使用
--dangerously-skip-permissions时,恶意项目仍可能泄露容器内可访问的内容(包括 Claude Code 凭证)。只在受信任的仓库中使用。
六大核心功能
| 功能 | 说明 |
|---|---|
| 生产级 Node.js | 基于 Node.js 20,含必要开发依赖 |
| 安全设计 | 自定义防火墙,只允许必要服务的出站连接 |
| 开发者友好工具 | 内置 git、ZSH(含效率增强)、fzf 等 |
| VS Code 无缝集成 | 预配置扩展和优化设置 |
| 会话持久化 | 容器重启后保留命令历史和配置 |
| 跨平台兼容 | 支持 macOS、Windows、Linux |
四步快速上手
# 第一步:安装 VS Code 和 Remote - Containers 扩展
# 扩展市场搜索「Remote Development」或「Dev Containers」
# 第二步:克隆 Claude Code 参考实现仓库
git clone https://github.com/anthropics/claude-code.git
cd claude-code
# 第三步:用 VS Code 打开
code .
# 第四步:在容器中重新打开
# 点击弹出的「Reopen in Container」提示
# 或:Cmd+Shift+P → Remote-Containers: Reopen in Container三个配置文件
Dev Container 由三个文件组成,位于仓库根目录的 .devcontainer/ 下:
devcontainer.json — 容器配置
{
"name": "Claude Code Dev",
"build": {
"dockerfile": "Dockerfile"
},
"extensions": [
"dbaeumer.vscode-eslint",
"esbenp.prettier-vscode"
],
"mounts": [
// 挂载 SSH 密钥等配置
"source=${localEnv:HOME}/.ssh,target=/home/node/.ssh,type=bind,consistency=cached"
],
"postCreateCommand": "sh .devcontainer/init-firewall.sh"
}主要控制:容器设置、VS Code 扩展、卷挂载。
Dockerfile — 镜像定义
FROM node:20-bullseye
# 安装开发工具
RUN apt-get update && apt-get install -y \
git zsh fzf curl wget jq \
iptables # 防火墙支持
# 安装 Claude Code
RUN npm install -g @anthropic-ai/claude-code
# 配置 ZSH 和效率增强
# ...init-firewall.sh — 网络安全��则
防火墙配置是 Dev Container 安全的核心:
#!/bin/bash
# 精确控制出站连接
# 允许 DNS(必须)
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT
# 允许 SSH(必须,用于 Git 操作)
iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT
# 允许白名单域名
# 包括:npm 注册表、GitHub、Claude API、包管理器等
# (通过 DNS 解析动态添加)
# 默认拒绝所有其他出站连接
iptables -A OUTPUT -j DROP
echo "Firewall initialized and verified"防火墙保护原则:
- 精确访问控制:只允许白名单域名(npm、GitHub、Claude API 等)的出站连接
- 允许 DNS 和 SSH:基础开发操作不受影响
- 默认拒绝:所有未明确允许的出站流量被阻断
- 启动验证:容器初始化时验证防火墙规则是否正常
- 系统隔离:与主机系统隔离的安全开发环境
在 Dev Container 中使用 --dangerously-skip-permissions
普通环境中,--dangerously-skip-permissions 跳过所有权限提示,有安全风险。但在 Dev Container 的防火墙隔离下,这个组合实现了安全的无人值守运行:
# 在 Dev Container 内
claude --dangerously-skip-permissions -p "Fix all TypeScript errors in src/"
# CI/CD Pipeline 中
docker run -v $(pwd):/workspace claude-code-devcontainer \
claude --dangerously-skip-permissions -p "Run the test suite and fix failures"这个组合的安全保障:
- 防火墙限制网络访问范围,阻止大多数数据外泄路径
- 容器隔离防止访问主机系统文件
- 但仍无法完全防止恶意代码利用容器内已有的凭证
自定义配置
# 添加 VS Code 扩展(devcontainer.json extensions 字段)
"golang.go" # Go 语言支持
"ms-python.python" # Python 支持
"rust-lang.rust-analyzer" # Rust 支持
# 调整资源配置(devcontainer.json)
"runArgs": ["--memory=8g", "--cpus=4"]
# 扩展网络白名单(init-firewall.sh)
# 添加内部服务的 IP 或域名到允许列表
# 自定义 Shell 配置
# 在 Dockerfile 中添加 ~/.zshrc 或 ~/.bashrc 配置与其他部署方式的对比
| 维度 | Dev Container | 本地直接运行 | Docker(无防火墙) |
|---|---|---|---|
| 环境一致性 | ✅ 完全一致 | ❌ 依赖本机 | ✅ 一致 |
| 隔离性 | ✅ 容器隔离 + 防火墙 | ❌ 无隔离 | ⚠️ 仅容器隔离 |
| 团队共享 | ✅ 配置版本控制 | ❌ 人工配置 | ⚠️ 需维护 Dockerfile |
--skip-permissions | ✅ 安全使用 | ❌ 风险极高 | ⚠️ 部分安全 |
| 上手速度 | 4 步完成 | 最快(无需配置) | 需要额外设置 |
原文:Development containers | 来源:Anthropic 官方文档