---
summary: "完整的 Docker 套件调度程序、其通道以及入门引导和 QR 冒烟"
title: "Docker 测试套件"
read_when:
- "您正在运行 Docker 测试通道"
- "您需要 Docker 调度程序环境变量"
---
## 完整 Docker 套件(`pnpm test:docker:all`)
构建共享的实时测试映像,将 OpenClaw 打包为 npm tarball,将 builds/reuses 打包为裸 Node/Git 运行程序映像,加上将该 tarball 安装到 `/app` 的功能映像,然后通过加权调度程序运行 Docker 烟雾通道。 `scripts/package-openclaw-for-docker.mjs` 是稳定的 local/CI 包打包程序入口点,并在 Docker 使用 tarball 和 `dist/postinstall-inventory.json` 之前验证它。
- 裸图(`OPENCLAW_DOCKER_E2E_BARE_IMAGE`):installer/update/plugin-dependency泳道;安装预构建的 tarball 而不是复制的存储库源。
- 功能镜像(`OPENCLAW_DOCKER_E2E_FUNCTIONAL_IMAGE`):普通的已构建应用功能通道。
- 通道定义:`scripts/lib/docker-e2e-scenarios.mts`。规划器:`scripts/lib/docker-e2e-plan.mts`。执行器:`scripts/test-docker-all.mjs`。
- `node scripts/test-docker-all.mjs --plan-json` 发出调度程序拥有的 CI 计划(通道、图像类型、package/live-image 需求、状态场景、凭证检查),而无需构建或运行 Docker。
调度参数(环境变量,括号内为默认值):
| 环境变量 | 默认值 | 用途 |
| --------------------------------------------------------------------------------------------------------------- | ------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `OPENCLAW_DOCKER_ALL_PARALLELISM` | 10 | 进程槽位。 |
| `OPENCLAW_DOCKER_ALL_TAIL_PARALLELISM` | 10 | 与提供者相关的尾部池。 |
| `OPENCLAW_DOCKER_ALL_LIVE_LIMIT` | 9 | 重型 live 提供者通道上限。 |
| `OPENCLAW_DOCKER_ALL_NPM_LIMIT` | 5 | npm-资源通道上限。 |
| `OPENCLAW_DOCKER_ALL_SERVICE_LIMIT` | 7 | 服务资源通道上限。 |
| `OPENCLAW_DOCKER_ALL_LIVE_CLAUDE_LIMIT` / `_CODEX_LIMIT` / `_GEMINI_LIMIT` / `_DROID_LIMIT` / `_OPENCODE_LIMIT` | 4 | 按提供者划分的重型通道上限。 |
| `OPENCLAW_DOCKER_ALL_LIVE_OPENAI_LIMIT` / `_TELEGRAM_LIMIT` | 1 | 更窄的按提供者上限。 |
| `OPENCLAW_DOCKER_ALL_WEIGHT_LIMIT` / `OPENCLAW_DOCKER_ALL_DOCKER_LIMIT` | - | 用于更大主机的覆盖设置。 |
| `OPENCLAW_DOCKER_ALL_START_STAGGER_MS` | 2000 | 通道启动之间的延迟,避免本地 Docker 守护进程创建风暴。 |
| `OPENCLAW_DOCKER_ALL_LANE_TIMEOUT_MS` | 7,200,000(120 分钟) | 每个通道的兜底超时;选中的 live/tail 通道使用更紧的上限。 |
| `OPENCLAW_DOCKER_ALL_DRY_RUN` | 关闭 | 输出通道清单而不运行 Docker。 |
| `OPENCLAW_DOCKER_ALL_STATUS_INTERVAL_MS` | 30000 | 活动通道状态打印间隔。 |
| `OPENCLAW_DOCKER_ALL_TIMINGS` | on | 复用 `.artifacts/docker-tests/lane-timings.json` 以按最长优先顺序排序;设为 `0` 可禁用。 |
| `OPENCLAW_DOCKER_ALL_LIVE_MODE` | - | `skip` 仅适用于 repeatable/local 通道,`only` 仅适用于实时提供商通道。别名:`pnpm test:docker:local:all`、`pnpm test:docker:live:all`。仅实时模式将主要和尾部实时通道合并到一个最长的第一个池中,以便提供商存储桶打包 Claude/Codex/Gemini 一起工作。 |
| `OPENCLAW_LIVE_CLI_BACKEND_SETUP_TIMEOUT_SECONDS` | 180 | CLI 后端 Docker 设置超时。 |
资源上限的环境变量模式为 `OPENCLAW_DOCKER_ALL__LIMIT`(资源名转为大写,非字母数字字符折叠为 `_`)。
每个lane执行一次;测试、提供程序和超时失败在运行摘要中仍然失败。
其他行为:运行程序默认预检 Docker,清除过时的 OpenClaw E2E 容器,在兼容通道之间共享提供程序 CLI 工具缓存,并在第一次失败后停止调度新的池通道,除非设置了 `OPENCLAW_DOCKER_ALL_FAIL_FAST=0`。如果一个通道超过低并行度主机上的有效 weight/resource 上限,它仍然可以从空池启动并单独运行,直到释放容量。每通道日志、`summary.json`、`failures.json` 和相位时序写入 `.artifacts/docker-tests//` 下;使用 `pnpm test:docker:timings ` 检查慢速通道,使用 `pnpm test:docker:rerun ` 打印廉价的目标重新运行命令。
### 值得注意的 Docker 通道
| 命令 | 验证 |
| -------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `pnpm test:docker:browser-cdp-snapshot` | Chromium-支持源E2E容器,带有原始CDP +隔离网关; `browser doctor --deep` CDP 角色快照包括链接 URL、光标提升的可点击内容、iframe 引用和框架元数据。 |
| `pnpm test:docker:skill-install` | 在一个裸 Docker 运行器中安装打包后的 tarball,使用 `skills.install.allowUploadedArchives: false`,从实时 ClawHub 搜索中解析当前 skill slug,通过 `openclaw skills install` 安装,并验证 `SKILL.md`、`.clawhub/origin.json`、`.clawhub/lock.json` 和 `skills info --json`。 |
| `pnpm test:docker:live-cli-backend:claude`, `:claude:resume`, `:claude:cache`, `:claude:mcp` | 重点关注CLI后端实时检查; `:claude:cache` 解决了无工具提示形状,然后要求在接下来的脏工作区恢复和思维级别更改后的稳定恢复上至少有 90% 的提示缓存重用。 Gemini 具有匹配的 `:resume` 和 `:mcp` 别名。 |
| `pnpm test:docker:openwebui` | Docker化OpenClaw+ 打开WebUI: 登录,查看`/api/models`,通过运行真正的代理聊天`/api/chat/completions`。需要可用的实时模型密钥并提取外部图像;预计不会CI-稳定像unit/e2e套房。 |
| `pnpm test:docker:mcp-channels` | 种子网关容器加上生成 `openclaw mcp serve` 的客户端容器:路由对话发现、转录读取、附件元数据、实时事件队列行为、出站发送路由和 Claude-style 通道 + 通过真实 stdio 桥的权限通知(断言直接读取原始 stdio MCP 帧)。 |
| `pnpm test:docker:upgrade-survivor` | 在肮脏的旧用户固定装置上安装打包的 tarball,运行软件包更新以及没有实时 provider/channel 密钥的非交互式医生,启动环回网关,检查 agents/channel config/plugin allowlists/workspace/session state/stale 遗留插件依赖项 state/startup/RPC 状态是否存在。 |
| `pnpm test:docker:published-upgrade-survivor` | 默认安装 `openclaw@latest`,播种真实的现有用户文件,通过烘焙的 `openclaw config set` 配方进行配置,更新到打包的 tarball,运行非交互式医生,写入 `.artifacts/upgrade-survivor/summary.json`,检查 `/healthz`、`/readyz`、RPC 状态。该配方使用 env key refs 配置 Anthropic、Google Gemini 和 OpenAI。设置 `OPENCLAW_UPGRADE_SURVIVOR_LIVE_MODELS="openai/gpt-5.5 anthropic/claude-opus-5 google/gemini-3.1-pro-preview"` 为每个模型标记轮次和汇总结果;为选定的提供商导出 `OPENAI_API_KEY`、`ANTHROPIC_API_KEY` 和 `GEMINI_API_KEY`。这优先于传统的 `OPENCLAW_UPGRADE_SURVIVOR_LIVE_OPENAI=1` 单模型形式。使用 `OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPEC` 覆盖,使用 `OPENCLAW_UPGRADE_SURVIVOR_BASELINE_SPECS` 扩展矩阵,或使用 `OPENCLAW_UPGRADE_SURVIVOR_SCENARIOS=reported-issues` 添加场景灯具(包括 `configured-plugin-installs` 和 `stale-source-plugin-shadow`)。包验收将这些公开为 `published_upgrade_survivor_baseline(s)` / `_scenarios` 并解析元令牌,例如 `last-stable-4` 或 `all-since-2026.6.1`。 |
| `pnpm test:docker:update-migration` | `plugin-deps-cleanup` 场景中已发布的升级幸存者harness,默认从最新稳定版本开始。 `Update Migration` 工作流程在扇出之前固定基线;通过 `baselines=all-since-2026.6.1` 进行明确的历史清理重放。 |
| `pnpm test:docker:plugins` | Install/update 本地路径的烟雾、`file:`、具有提升依赖项的 npm 注册表包、git moving refs、ClawHub 固定装置、市场更新和 Claude-bundle enable/inspect. |
### Anthropic 运行时上下文缓存回归
使用 `ANTHROPIC_API_KEY` 运行 `pnpm test:docker:live-anthropic-cache`,以根据 `claude-sonnet-4-6` 验证软件包安装的 Anthropic 提供程序和托管传输。功能图像使用准备好的候选包; `OPENCLAW_SKIP_DOCKER_BUILD=1` 重复使用现有图像。首先通过相同安装的构建器运行 `pnpm test:docker:live-anthropic-cache --mock` 以进行秘密 HTTP/SSE 证明。模拟输出标记其合成用途;只有默认的实时模式才能证明提供程序缓存的读取和写入。
每个构建器都会提出四个请求:初始对话、两个实际的工具结果延续以及下一个用户回合。该工具将合成的临时运行时上下文载体移动到请求尾部,并检查它是否永远不会成为缓存断点或缓存前缀的一部分。初始会话必须写入至少 4,096 个缓存令牌;后续读取必须达到写入的 90%,并且在每次继续后都会增长,而新写入则保持在初始写入的 25% 以下。简短的系统提示可防止仅系统缓存命中满足对话楼层。每个请求都有 90 秒的截止日期,并且不得重试。
此阻塞通道在 stable/full 完整版本验证 Docker `core` 块中运行。日志包含令牌使用情况和断点位置,合成提示内容不输出。网关会话生命周期和保留的运行时上下文仍然由其所有者测试覆盖。
### 沙箱兼容性通道
| 命令 | 验证 |
| -------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `pnpm test:e2e:openshell` | 真正的 OpenShell 网关、隔离的控制平面工作区、自定义映像、远程和镜像文件系统、八路混合 exec/file 压力、精确的 host/remote 库存、故障恢复、SSH 清理、受保护的主机元数据和 deny/allow 网络策略。 |
| `pnpm test:docker:package-install` | 将打包后的 OpenClaw npm 制品安装到干净的全局前缀中,然后从已安装包启动 CLI 版本和帮助信息。 |
| `pnpm test:docker:openai-web-search-minimal` | 带有私有测试 CA 的模拟 TLS 端点、隔离的网关启动,以及通过配置的证书信任路径处理 web-search 请求。 |
| `pnpm test:docker:browser-cdp-snapshot` | Chromium 启动、原始 CDP 连通性、隔离的网关浏览器命令、doctor 输出,以及无障碍快照角色。 |
| `pnpm test:docker:kitchen-sink-rpc` | 已安装的插件命令和目录工具、只读的网关 RPC 遍历、身份验证边界、通道生命周期,以及资源上限。 |
| `pnpm test:docker:kitchen-sink-plugin` | 打包和注册表插件安装流程、插件执行、预期不受支持的版本失败、ClawHub 回退以及 npm- 到 ClawHub 迁移。 |
## 入门 E2E(Docker)
可选;仅在容器化入门冒烟测试时需要。在干净的 Linux 容器中执行完整的冷启动流程:
```bash
scripts/e2e/onboard-docker.sh
```
通过伪终端驱动交互式向导,验证 config/workspace/session 状态,然后启动网关并运行 `openclaw health`。
## QR 导入烟雾测试(Docker)
检查维护的 QR 运行时帮助程序是否在默认 Docker Node 24 运行时下加载:
```bash
pnpm test:docker:qr
```