跳转到内容

配置

所有配置都存放在项目根目录的 .env 文件中。该文件已被 gitignore 忽略 — 不会被提交到版本控制。

容器支持两种互斥的认证模式(按优先级排序):

  • LiteLLM 代理 — 设置 LITELLM_BASE_URLLITELLM_API_KEY 以通过 LiteLLM 代理路由(见下文)。
  • OAuth 模式 — 仅设置 CLAUDE_CODE_OAUTH_TOKEN(见下文)。

不要混合使用模式 — 请只使用其中一种。

变量描述示例
CLAUDE_CODE_OAUTH_TOKEN来自 Claude Max 订阅的 OAuth 令牌sk-ant-oat01-...

设置后,Claude Code 将使用 OAuth 直接与 Anthropic 进行认证 — 无需 API 密钥或代理。您可以从 Claude Code 设置或 Anthropic 控制台 获取令牌。

如果您的 LiteLLM(或其他)代理已经支持原生 Anthropic Messages API — 包括 web_search、流式传输和工具使用 — 请将 LITELLM_BASE_URL 设置为代理域名。容器会自动派生特定提供商的 URL:

  • Anthropic 端点 → ${LITELLM_BASE_URL}/anthropic(Claude Code 使用)
  • OpenAI 兼容端点 → ${LITELLM_BASE_URL}/openai/v1
变量描述示例
LITELLM_BASE_URLLiteLLM 代理的域名(不含路径后缀)https://litellm.example.com
LITELLM_API_KEY用于代理认证的 API 密钥your-api-key 或默认为 litellm-proxy

用户只需设置域名 — 提供商路径后缀会自动添加。 在运行时,入口脚本会从 LITELLM_API_KEY 派生 ANTHROPIC_API_KEY,这样 Claude Code 就可以使用代理凭据,而无需额外的面向用户的变量。

在此模式下,模型名称不会被重新映射。Claude Code 发送其标准模型标识符(例如 claude-sonnet-4-6),LiteLLM 将其路由到您配置的后端。

默认情况下,Node.js 会验证所有 HTTPS 连接的 TLS 证书。如果您的上游 API 提供商使用自签名证书(内部 Open WebUI 或 LiteLLM 代理中较为常见),您可以通过在 .env 文件中添加以下内容来禁用验证:

NODE_TLS_REJECT_UNAUTHORIZED=0

不建议在生产环境中使用此设置。仅在您信任容器与 API 端点之间的网络路径时才设置此选项。

除 Claude Code 外,容器还包含多个 AI 编码代理:

代理命令提供商
CodexcodexOpenAI 兼容
Pipi多提供商(运行时配置)
Oh-My-Piomp多提供商(运行时配置)

Pi 和 Oh-My-Pi 作为全局 npm 包安装。Codex 是一个独立二进制文件,会在运行时自动更新。

容器运行一个虚拟显示栈,用于查看和交互图形化浏览器。有关连接说明和环境变量(ENABLE_VNCVNC_RESOLUTIONDISPLAYNOVNC_HOST_PORT),请参阅远程显示(noVNC)

容器包含一个预配置的 Chrome DevTools MCP 服务器,用于无头浏览器自动化。Claude Code 可以导航网页、截取屏幕截图和检查 DOM,无需任何额外设置。详情请参阅 Chrome DevTools MCP

变量描述设置方式
GIT_AUTHOR_NAME用于 git 提交的名称git config user.name
GIT_AUTHOR_EMAIL用于 git 提交的邮箱git config user.email

如果您的主机上已配置 git,可以自动填充这两个值:

Terminal window
echo "GIT_AUTHOR_EMAIL=$(git config user.email)" >> .env
echo "GIT_AUTHOR_NAME=\"$(git config user.name)\"" >> .env
变量描述设置方式
SSH_PRIVATE_KEYBase64 编码的私钥base64 < ~/.ssh/id_ed25519
变量描述设置方式
GH_TOKEN用于 gh CLI 和 HTTPS git 的 GitHub 个人访问令牌gh auth token(如果本地已安装 gh

.env 中设置了 GH_TOKEN 时,gh CLI 会自动认证 — 无需运行 gh auth login。入口脚本还会运行 gh auth setup-git,配置 git 凭据助手,使 HTTPS 的 git clonegit push 无需 SSH 密钥即可工作。

如果您的主机上已安装并认证了 gh,可以直接提取令牌:

Terminal window
echo "GH_TOKEN=$(gh auth token)" >> .env

否则,请创建个人访问令牌并手动添加。细粒度令牌(推荐)和经典令牌均可使用。细粒度令牌允许您将访问范围限定到特定仓库。经典令牌需要 repo 权限范围才能访问私有仓库。

要在容器内验证认证状态:

Terminal window
gh auth status

所有语言运行时、CLI 和工具都在镜像构建时直接在 Dockerfile 中安装。预构建镜像在每次推送到 main 分支时发布到 ghcr.io/f5-sales-demo/devcontainer:latest,因此大多数用户无需在本地构建。

运行 docker compose up -d 会自动拉取预构建镜像。如果自定义了 Dockerfile 后需要在本地构建,请显式传递构建文件:

Terminal window
docker compose -f docker-compose.yml -f docker-compose.build.yml up -d --build

详情请参阅本地开发

Dockerfile 使用两阶段构建,针对 Docker 层缓存进行了优化。完整的层分解和构建缓存详情请参阅本地开发 — 两阶段构建架构

容器包含内置配置,可防止 Claude Code 混淆工具名称。工具感知安装在两个记忆层级中,以实现纵深防御:

  • 托管策略/etc/claude-code/CLAUDE.md)— 在 Docker 构建时安装。这是 Claude Code 记忆层级中优先级最高的层级,即使工作目录中存在大型项目 CLAUDE.md 也会始终加载。
  • 用户记忆~/.claude/CLAUDE.md)— 在首次启动时由入口脚本生成。提供备份层以及用户可见的、可自定义的副本。

Claude Code 从多个记忆层级加载指令(从最高到最低优先级):

  1. 托管策略/etc/claude-code/)— 始终加载,不可排除
  2. 项目记忆./CLAUDE.md)— 按项目目录加载
  3. 用户记忆~/.claude/CLAUDE.md)— 在所有会话中全局加载
  4. 本地记忆./CLAUDE.local.md)— 个人项目级覆盖

如果没有托管策略层级,用户记忆中的工具感知在与大型项目级 CLAUDE.md 竞争时可能被降低优先级,导致 Claude 失去对其 PascalCase 工具名称的感知。托管层级确保工具感知始终以最高优先级加载。

运行内置自检以验证配置:

Terminal window
claude-self-test

这将检查所有配置文件是否就位并包含预期的工具引用。

要向镜像添加工具,请编辑 Dockerfile 并在本地重新构建。有关添加 APT 包、npm 工具、pip 工具和二进制下载的说明,请参阅本地开发 — 添加工具

扩展在 .devcontainer/devcontainer.jsoncustomizations.vscode.extensions 下配置,在 VS Code 中打开时会自动安装。

所有数据存放在命名卷中 — 不挂载主机目录:

挂载点内容
workspace/workspace您克隆的仓库和项目文件
home/home/vscodeShell 历史记录、工具配置、缓存、SSH 密钥

两者在容器重启和重建后都会保留。在重启前运行 docker compose pull 以获取最新的预构建镜像。

操作数据
docker compose down保留
docker compose down -v删除
主机容器服务
127.0.0.1:${NOVNC_HOST_PORT:-6080}6080noVNC 远程显示(仅限 localhost,可通过 NOVNC_HOST_PORT 覆盖)

端口绑定到 127.0.0.1,因此只能从您的机器访问,不会暴露到网络。