谁会遇到问题:已按 Docker 或本机装好 OpenClaw,但 openclaw CLI 在首次配对、onboarding 或容器内执行时反复报 WebSocket 1006/1008,或日志出现 token mismatch,改配置文件也不生效。本文结论:把「环境变量覆盖」「CLI 实际连接的 ws URL」「配对状态机」三件事对齐到同一张对照表,再衔接 openclaw doctor 与 Docker 网络篇。结构:六类高频误判 → 症状矩阵 → 指纹命令 → 六步 Runbook → 三 KPI → 选型收束。
OpenClaw 的 Gateway 在 2025–2026 社区排障里,配对与鉴权问题常与「网络不通」混为一谈:日志里同时出现断开码与模型错误,容易让人误以为是上游 LLM 挂了。下面六条是值班表中最常把工程师带偏的路径,建议与《装后 doctor 与 Gateway 健康检查》一起打印在 Wiki 首页。
OPENCLAW_GATEWAY_TOKEN 静默覆盖配置文件:容器或 launchd 单元里注入的环境变量优先级更高,文件里的 gateway.auth.token 已改但进程仍读旧值,表现为「改完重启仍 mismatch」。127.0.0.1:在 compose 里未把 CLI 的 Gateway URL 指到 openclaw-gateway 服务名时,握手阶段即失败,日志可能只给 1006/1008 而看不到应用层错误,与《Docker 网络分诊清单》症状重叠。.openclaw 或等价配置,CLI 实际加载路径与编辑器打开的不是同一个文件。与《官方安装脚本与 npm 全局路径》的关系:安装篇保证「二进制与 Node 版本在 PATH」;本篇保证「CLI 与 Gateway 对同一 token、同一 ws 端点说话」。两者应在同一「首次上线 Runbook」里顺序引用。
下列矩阵用于第一次分诊:若某行命中,请先把对应检查做到「可复现的命令输出」再进入下一层;避免同时改 token、改 compose、改反代三处。
| 你看到的表面症状 | 优先怀疑栈 | 立刻做的检查 | 下一步文档 |
|---|---|---|---|
日志:token mismatch 且改文件无效 | 环境变量覆盖 / 多配置文件 | 打印进程环境里的 OPENCLAW_GATEWAY_*;对照实际加载路径 | 本文 §3 指纹脚本;装后 doctor 篇 |
| 仅容器内失败,宿主机成功 | 回环地址 / 服务名 / DNS | 在容器里 curl 或 nc 探活 Gateway 端口;核对 ws URL host | Docker 网络分诊清单 |
| 1008 + 401/403 语义或鉴权失败字样 | 鉴权配置、反向代理剥离头 | 直连 loopback 复现;对比反代前后响应头 | Nginx/Caddy 反代与 WebSocket 篇 |
| 1006 频繁、无明显鉴权错误 | 中间空闲断开、探针误杀、版本不一致 | 对齐 CLI 与 Gateway 版本;看网关日志是否主动回收会话 | Gateway 无回复与 doctor 篇 |
| onboarding UI/CLI 卡住不动 | 状态机未完成 / 端口被占 | 检查监听端口冲突;重跑配对前清理临时状态(按官方指引) | 官方 Troubleshooting;本文 Runbook |
| 重装后「第一次就连」但随即断 | 旧 token 注入层仍在 | 检查 systemd drop-in、shell profile、CI 变量 | 安装脚本篇的 pin 与代理回退节 |
把输出粘贴到工单;占位路径请替换为你的配置根。与《Docker 持久化卷与权限》一起评审时,确认挂载没有把旧配置目录盖在新卷之上。
# A) 当前 shell 可见的环境变量(注意大小写与前缀) env | sort | grep -i OPENCLAW || true # B) 仅示例:若使用 systemd 管理 gateway,查看 drop-in 是否注入 token # systemctl show openclaw-gateway --property=Environment 2>/dev/null || true # C) CLI 版本与 doctor(先浅后深,避免在生产盲目 --fix) openclaw --version || true openclaw doctor 2>/dev/null | sed -n '1,40p' || true # D) 打印 CLI 侧配置的 gateway URL(具体子命令以你安装版本为准) # openclaw config get gateway.remoteUrl # 示例名,占位 # E) Docker:进入运行 CLI 的容器核对 ws 目标不是 127.0.0.1:18789 误指 # docker compose exec cli sh -lc 'env | grep -i OPENCLAW; getent hosts openclaw-gateway || true'
提示:社区 issue 中常见「环境变量里的 token 与文件不一致」导致的长时间 onboarding 卡住;先把 A/B 两步输出贴全,再讨论是否要改 compose。
OPENCLAW_GATEWAY_TOKEN 等注入,确认进程重启后环境干净,再写回配置文件中的单一真源。doctor --deep,在变更窗口内使用并保存输出。工程对齐说明(非实验室跑分,仅社区与运维侧经验区间):在公开 issue 讨论中,token 双轨与容器内回环误指长期占据「首次部署失败」类问题的前列;把环境变量审计写进变更模板后,平均排障轮次通常可明显下降。更重要的是,这类问题与机型 GHz 关系不大,换更大内存未必解决握手失败。
若 Gateway 需要 7×24 在线且避免与个人笔记本抢电、抢睡眠,应把「稳定独占执行面」与「配对/升级窗口」写进同一 SRE 文档;这与企业在远程 Mac 上常驻 Agent 网关的实践相一致。
个人设备上的 Gateway 易受睡眠、VPN 切换与企业证书更新影响,配对状态机更难做可审计回放;一旦 token 轮换涉及多人 CI,笔记本场景也缺少固定主机名与稳定回环边界,排障日志碎片化。
把 Gateway 放在可随时重启、磁盘与日志可预测、且与团队 Runner 同网的独占远程 Mac,通常比在多台个人机之间漂移更利于收敛 onboarding 问题;对需要 Apple Silicon 常驻、并与 CI 密钥模型一致交付的团队而言,MACCOME 的 Mac mini M4 / M4 Pro 多地区节点与弹性租期,能把「配对排障」与「执行面稳定」放在同一账单与变更节奏里。建议先阅读公开价格说明,再把远程机纳入与《远程 Mac 常驻运维清单》一致的运维表。
试点建议:选一台与主 CI 同区的远程机,仅部署 Gateway + 最小 smoke job,跑满本节六步 Runbook 的双周复盘,再决定是否把交互式开发也迁到同一拓扑。
常见问题
应该先跑 doctor 还是先改 token?
先按本文表 1 做「配对/token」分流;若已确认是网络层再并行 doctor 的网络检查项。公开价格与区域说明见 租赁价格说明。
1006 一定比 1008「更不严重」吗?
不一定。应结合相邻日志行与是否可稳定复现;把断开码当作标签而非结论,避免跳过鉴权排查。
可以在生产容器里长期 export token 吗?
不推荐。更稳妥的是由编排注入短期凭据或使用密钥管理侧车,并把「真源」收敛到一处;否则轮换时极易出现双轨。