配置
所有配置都存放在项目根目录的 .env 文件中。该文件已被 gitignore 忽略 — 不会被提交到版本控制。
AI 提供商
Section titled “AI 提供商”容器支持两种互斥的认证模式(按优先级排序):
- LiteLLM 代理 — 设置
LITELLM_BASE_URL和LITELLM_API_KEY以通过 LiteLLM 代理路由(见下文)。 - OAuth 模式 — 仅设置
CLAUDE_CODE_OAUTH_TOKEN(见下文)。
不要混合使用模式 — 请只使用其中一种。
Claude Max(OAuth)
Section titled “Claude Max(OAuth)”| 变量 | 描述 | 示例 |
|---|---|---|
CLAUDE_CODE_OAUTH_TOKEN | 来自 Claude Max 订阅的 OAuth 令牌 | sk-ant-oat01-... |
设置后,Claude Code 将使用 OAuth 直接与 Anthropic 进行认证 — 无需 API 密钥或代理。您可以从 Claude Code 设置或 Anthropic 控制台 获取令牌。
LiteLLM 代理
Section titled “LiteLLM 代理”如果您的 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_URL | LiteLLM 代理的域名(不含路径后缀) | 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 将其路由到您配置的后端。
TLS 证书验证
Section titled “TLS 证书验证”默认情况下,Node.js 会验证所有 HTTPS 连接的 TLS 证书。如果您的上游 API 提供商使用自签名证书(内部 Open WebUI 或 LiteLLM 代理中较为常见),您可以通过在 .env 文件中添加以下内容来禁用验证:
NODE_TLS_REJECT_UNAUTHORIZED=0不建议在生产环境中使用此设置。仅在您信任容器与 API 端点之间的网络路径时才设置此选项。
AI 编码代理
Section titled “AI 编码代理”除 Claude Code 外,容器还包含多个 AI 编码代理:
| 代理 | 命令 | 提供商 |
|---|---|---|
| Codex | codex | OpenAI 兼容 |
| Pi | pi | 多提供商(运行时配置) |
| Oh-My-Pi | omp | 多提供商(运行时配置) |
Pi 和 Oh-My-Pi 作为全局 npm 包安装。Codex 是一个独立二进制文件,会在运行时自动更新。
远程显示(noVNC)
Section titled “远程显示(noVNC)”容器运行一个虚拟显示栈,用于查看和交互图形化浏览器。有关连接说明和环境变量(ENABLE_VNC、VNC_RESOLUTION、DISPLAY、NOVNC_HOST_PORT),请参阅远程显示(noVNC)。
Chrome DevTools MCP
Section titled “Chrome DevTools MCP”容器包含一个预配置的 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,可以自动填充这两个值:
echo "GIT_AUTHOR_EMAIL=$(git config user.email)" >> .envecho "GIT_AUTHOR_NAME=\"$(git config user.name)\"" >> .env| 变量 | 描述 | 设置方式 |
|---|---|---|
SSH_PRIVATE_KEY | Base64 编码的私钥 | base64 < ~/.ssh/id_ed25519 |
GitHub CLI
Section titled “GitHub CLI”| 变量 | 描述 | 设置方式 |
|---|---|---|
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 clone 和 git push 无需 SSH 密钥即可工作。
如果您的主机上已安装并认证了 gh,可以直接提取令牌:
echo "GH_TOKEN=$(gh auth token)" >> .env否则,请创建个人访问令牌并手动添加。细粒度令牌(推荐)和经典令牌均可使用。细粒度令牌允许您将访问范围限定到特定仓库。经典令牌需要 repo 权限范围才能访问私有仓库。
要在容器内验证认证状态:
gh auth status工具安装方式
Section titled “工具安装方式”所有语言运行时、CLI 和工具都在镜像构建时直接在 Dockerfile 中安装。预构建镜像在每次推送到 main 分支时发布到 ghcr.io/f5-sales-demo/devcontainer:latest,因此大多数用户无需在本地构建。
运行 docker compose up -d 会自动拉取预构建镜像。如果自定义了 Dockerfile 后需要在本地构建,请显式传递构建文件:
docker compose -f docker-compose.yml -f docker-compose.build.yml up -d --build详情请参阅本地开发。
运行 podman-compose up -d 会自动拉取预构建镜像。如果自定义了 Dockerfile 后需要在本地构建,请显式传递构建文件:
podman-compose -f docker-compose.yml -f docker-compose.build.yml up -d --build详情请参阅本地开发。
Dockerfile 使用两阶段构建,针对 Docker 层缓存进行了优化。完整的层分解和构建缓存详情请参阅本地开发 — 两阶段构建架构。
Claude Code 工具感知
Section titled “Claude Code 工具感知”容器包含内置配置,可防止 Claude Code 混淆工具名称。工具感知安装在两个记忆层级中,以实现纵深防御:
- 托管策略(
/etc/claude-code/CLAUDE.md)— 在 Docker 构建时安装。这是 Claude Code 记忆层级中优先级最高的层级,即使工作目录中存在大型项目CLAUDE.md也会始终加载。 - 用户记忆(
~/.claude/CLAUDE.md)— 在首次启动时由入口脚本生成。提供备份层以及用户可见的、可自定义的副本。
记忆层级优先级
Section titled “记忆层级优先级”Claude Code 从多个记忆层级加载指令(从最高到最低优先级):
- 托管策略(
/etc/claude-code/)— 始终加载,不可排除 - 项目记忆(
./CLAUDE.md)— 按项目目录加载 - 用户记忆(
~/.claude/CLAUDE.md)— 在所有会话中全局加载 - 本地记忆(
./CLAUDE.local.md)— 个人项目级覆盖
如果没有托管策略层级,用户记忆中的工具感知在与大型项目级 CLAUDE.md 竞争时可能被降低优先级,导致 Claude 失去对其 PascalCase 工具名称的感知。托管层级确保工具感知始终以最高优先级加载。
运行内置自检以验证配置:
claude-self-test这将检查所有配置文件是否就位并包含预期的工具引用。
要向镜像添加工具,请编辑 Dockerfile 并在本地重新构建。有关添加 APT 包、npm 工具、pip 工具和二进制下载的说明,请参阅本地开发 — 添加工具。
VS Code 扩展
Section titled “VS Code 扩展”扩展在 .devcontainer/devcontainer.json 的 customizations.vscode.extensions 下配置,在 VS Code 中打开时会自动安装。
所有数据存放在命名卷中 — 不挂载主机目录:
| 卷 | 挂载点 | 内容 |
|---|---|---|
workspace | /workspace | 您克隆的仓库和项目文件 |
home | /home/vscode | Shell 历史记录、工具配置、缓存、SSH 密钥 |
两者在容器重启和重建后都会保留。在重启前运行 docker compose pull 以获取最新的预构建镜像。
| 操作 | 数据 |
|---|---|
docker compose down | 保留 |
docker compose down -v | 删除 |
两者在容器重启和重建后都会保留。在重启前运行 podman-compose pull 以获取最新的预构建镜像。
| 操作 | 数据 |
|---|---|
podman-compose down | 保留 |
podman-compose down -v | 删除 |
| 主机 | 容器 | 服务 |
|---|---|---|
127.0.0.1:${NOVNC_HOST_PORT:-6080} | 6080 | noVNC 远程显示(仅限 localhost,可通过 NOVNC_HOST_PORT 覆盖) |
端口绑定到 127.0.0.1,因此只能从您的机器访问,不会暴露到网络。