在 Docker 容器里运行 Claude Code 有明显优势:环境一致、权限隔离、CI/CD 友好。本文给出完整的配置方案,从本地开发到生产 CI/CD 全覆盖。
为什么要在容器里运行
- 环境一致:团队成员、CI/CD 用同一个镜像,不再有 "我这里是好的" 问题
- 权限隔离:Claude Code 的 Bash 工具只能访问容器内,不影响宿主机
- 依赖可控:把项目需要的 Node.js、Python、Go 版本打包进镜像
- CI 友好:直接在 GitHub Actions / GitLab CI 里使用
基础 Dockerfile
dockerfile
FROM node:22-slim
# 安装 Claude Code
RUN npm install -g @anthropic-ai/claude-code
# 安装常用工具
RUN apt-get update && apt-get install -y \
git curl python3 python3-pip \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /workspace
# 非 root 用户(安全最佳实践)
RUN useradd -m -u 1000 developer
USER developer
CMD ["claude"]完整开发镜像(含 Python 项目支持)
dockerfile
FROM node:22-slim
ARG PYTHON_VERSION=3.11
RUN apt-get update && apt-get install -y \
git curl wget jq \
python3 python3-pip python3-venv \
build-essential \
&& rm -rf /var/lib/apt/lists/*
RUN npm install -g @anthropic-ai/claude-code
WORKDIR /workspace
RUN useradd -m -u 1000 developer && \
chown developer:developer /workspace
USER developer
# Claude 配置目录
RUN mkdir -p /home/developer/.claude
VOLUME ["/workspace", "/home/developer/.claude"]
CMD ["bash"]docker-compose 开发环境
yaml
# docker-compose.yml
version: '3.8'
services:
claude-dev:
build: .
environment:
- ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}
volumes:
- .:/workspace # 挂载项目代码
- claude-config:/home/developer/.claude # 持久化配置
stdin_open: true
tty: true
working_dir: /workspace
volumes:
claude-config:bash
# 启动开发环境
docker-compose run --rm claude-dev claude环境变量安全管理
bash
# 方法 1:.env 文件(不提交到 git)
echo 'ANTHROPIC_API_KEY=sk-ant-xxx' > .env
echo '.env' >> .gitignore
docker-compose --env-file .env run --rm claude-dev claude
# 方法 2:Docker secrets(生产环境推荐)
echo 'sk-ant-xxx' | docker secret create anthropic_key -json
// .claude/settings.json(在容器内)
{
"permissions": {
"allow": ["Bash(npm *)", "Bash(python *)", "Bash(git *)"],
"deny": ["Bash(curl *)", "Bash(wget *)"]
}
}DevContainer 配置(VS Code Remote)
json
// .devcontainer/devcontainer.json
{
"name": "Claude Code Dev",
"dockerFile": "Dockerfile",
"containerEnv": {
"ANTHROPIC_API_KEY": "${localEnv:ANTHROPIC_API_KEY}"
},
"mounts": [
"source=${localWorkspaceFolder},target=/workspace,type=bind"
],
"extensions": [
"anthropic.claude-code"
],
"postCreateCommand": "npm install"
}CI/CD 集成(GitHub Actions)
yaml
# .github/workflows/claude-task.yml
jobs:
claude-fix:
runs-on: ubuntu-latest
container:
image: node:22-slim
steps:
- uses: actions/checkout@v4
- run: npm install -g @anthropic-ai/claude-code
- run: |
claude -p "Fix all TypeScript type errors" --allowedTools Bash,Edit,Read
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
- name: Commit fixes
run: |
git config user.name 'Claude Bot'
git config user.email 'claude@ci'
git add -A
git diff --staged --quiet || git commit -m 'fix: AI auto-fix TypeScript errors'常见问题
权限错误:容器里用非 root 用户,确保工作目录有写入权限。
API Key 未生效:检查 docker-compose 是否正确传入环境变量:docker-compose run -e ANTHROPIC_API_KEY=$ANTHROPIC_API_KEY ...
Claude 找不到命令:确保 npm 全局 bin 在 PATH 里:export PATH=$(npm bin -g):$PATH
容器内 git 权限问题:
bash
git config --global --add safe.directory /workspace来源:Claude Code DevContainer - Anthropic 官方文档