2026 年 OpenClaw Docker 在 VPS 起步排障
Exit 137 与 Control UI 报错对照表

mem_limit · WASM 首轮等待 · allowedOrigins · compose exec 配对 · 可复制 compose

2026年OpenClaw Docker在VPS起步排障

已按教程拉起 docker compose 的开发者在小内存 VPS 上最常遇到三类表象:容器秒退 137、18789 长时间无响应、Control UI 报 non-loopback 或 Host 头相关错误。本文先给free -h 与 mem_limit、首轮 WASM 编译 3~7 分钟窗口的可执行清单,再用症状 → docker logs 证据 → 修复动作表覆盖 Exit 137、卷权限与挂载错位;接着用127.0.0.1 绑定、allowedOrigins 与反代决策表收敛 UI 报错;最后给出六步容器内设备配对上线前十项勾选。可与OpenClaw v2026.4 安装与 Docker 加固长文Gateway 安装与 doctor 排障清单运行期三段式排障交叉阅读,把「能起容器」升级到「无人值守也稳定」

01

资源前置:free -h、mem_limit 与首轮 WASM 编译「假卡死」怎么区分

OpenClaw Gateway 在容器内首次启动时常见CPU 打满但端口迟迟不开,多数属于 WASM 沙箱编译阶段而非死锁。与v2026.4 安装长文中的资源建议对齐:宿主可用内存与 mem_limit 同时过紧时,Linux OOM 会直接给出 Exit 137,日志里未必来得及打印友好错误。

  1. 01

    宿主侧:在宿主机执行 free -h,确认可用内存是否长期低于约 1.5~2 GiB 的可用余量;swap 为 0 时 137 更常见。

  2. 02

    Compose 侧:为服务设置 mem_limit: 2g 或更高,并避免与其它重服务同机抢内存。

  3. 03

    首轮窗口:冷启动预留 3~7 分钟再判定失败;期间可用 docker logs -f 观察是否仍在编译链。

  4. 04

    健康检查:healthcheck.start_period 建议至少 360s,避免 compose 在 WASM 完成前误杀重启。

  5. 05

    误判止损:不要在首轮窗口内连续 docker compose restart,否则每次都会重新触发冷编译峰值。

把以上五条写进「VPS 上架 OpenClaw」Runbook 的第一页,可显著减少「教程一步步照做仍起不来」的工单量。更完整的 Gateway 分层排障见运行期三段式长文

02

Exit 137、卷权限与挂载错位:症状、docker logs 证据与修复动作表

下列表格刻意保持「先证据后动作」顺序,便于把工单从「感觉网关坏了」收敛到可复现字段。与doctor 安装排障清单联用时,可把表格行号写进工单模板。

症状docker logs / 宿主证据优先修复动作
秒退 137dmesg 出现 OOM;或日志突然中断提高 mem_limit / 升级规格;减少同机竞争
Permission denied 读 workspace挂载目录属主为 root,容器内 node 用户无法写chown 到容器 UID 或改用 user: 与卷一致
配置写了但不生效宿主机路径与 compose 卷指向两套 .openclaw统一为单一绑定路径;重启前 docker compose config 校验
DNS 偶发失败容器内 curl 模型端点超时按安装长文检查 Docker dns 与宿主解析
反复重启无新日志健康检查过短触发杀进程放宽 start_periodretries

Docker 排障是否高效,取决于「137 是否先被证明为 OOM,而不是先被猜为应用 bug」。

若你把 Gateway 与始终在线的远程 Mac 节点组合使用,请把「容器资源」和「节点 SLA」分成两条验收线:前者看 compose 与日志,后者看供应商可用区与维护窗口。

03

Control UI、127.0.0.1 绑定与反代:allowedOrigins 与 Host 头选项怎么选

在 VPS 上把 18789 暴露到公网是最常见的误配置之一。安装长文推荐容器只绑定回环地址,由 Caddy 或 Nginx 在 443 终止 TLS。Control UI 若报 non-loopback 类错误,本质是浏览器来源与 Gateway 允许的 Origin 不一致,而不是「Docker 坏了」。

场景监听与反代配置取向
仅本机 SSH 隧道调试127.0.0.1:18789allowedOriginshttp://127.0.0.1:18789
HTTPS 域名正式访问反代到回环上游allowedOrigins 列出 https://你的域名;优先不用 Host 回退
临时实验室HTTP 内网 IP显式列出 IP 来源;缩小 CIDR;配好维护窗口后回收
排障期「只想先看到 UI」仍建议保留 TLS 外层仅在理解风险下使用官方文档提到的 Host 头回退开关;事后必须回滚
json
{
  "gateway": {
    "mode": "local",
    "controlUi": {
      "allowedOrigins": ["https://openclaw.example.com"]
    }
  }
}

提示:openclaw.json 后观察 docker compose restart 是否落在首轮 WASM 窗口内,避免与第二节的误判叠加。

04

六步 Runbook:docker compose exec 下 devices list、approve 与路径错位

容器内执行 openclaw 时,HOME 与配置卷必须与运行时进程一致,否则会出现「宿主机已 approve、容器里仍 pending」。下列步骤默认服务名 openclaw,请按你的 compose 服务名替换。

  1. 01

    确认服务名:docker compose ps 找到实际运行 Gateway 的容器。

  2. 02

    进入相同环境:docker compose exec openclaw sh -lc 'pwd; echo $HOME; ls -la ~/.openclaw | head'

  3. 03

    列出待配对请求:docker compose exec openclaw openclaw devices list

  4. 04

    复制 Request ID:从 UI 或日志拿到 ID 后执行 openclaw devices approve <id>

  5. 05

    校验 API Key 可见性:若报 No API key found for provider,检查 .env 是否被 compose 传入容器,而非只写在宿主机 shell profile。

  6. 06

    写回工单字段:把 compose 文件路径、镜像 tag、openclaw.json 摘要与 approve 命令贴进工单,便于下次复用。

注意:在宿主机直接跑 openclaw devices approve 但配置卷只挂在容器内时,会出现「命令成功但 Gateway 仍不认」的假阴性。

05

可复制 compose 骨架、十条上线勾选与「笔记本挂机」替代方案

下列三条为社区与生产环境常见的核对区间,请用你们宿主机的真实监控数据替换;写进 README 可避免新人重复踩坑。

  • 首轮启动预算:冷启动至少预留 3~7 分钟再打开工单;短于 3 分钟就重启会放大 137。
  • 内存水位:单实例建议宿主可用内存长期高于 2 GiB 余量;低于该区间优先考虑升配而非继续堆功能。
  • 日志轮转:Docker json-file 限制 单文件 ≤10MiB、保留 ≤3 个,避免磁盘写满导致二次故障。
序号上线前勾选通过判据
01ports 仅绑定 127.0.0.1公网直连 18789 关闭
02env_file 与密钥注入路径一致容器内可读到模型供应商 Key
03mem_limit 与 swap 策略写明压测一轮无 137
04healthcheck.start_period ≥ 360s首轮窗口内无重启风暴
05openclaw.jsongateway.modelocal非法键已清理
06反代 TLS 与 HSTS 策略浏览器无混容警告
07allowedOrigins 覆盖真实访问来源Control UI 无 non-loopback 报错
08设备配对在容器内走通devices list 为空或已 approve
09备份 .openclaw 路径与版本号可在一页 runbook 复原
10与通道文档对齐IM 或 Webhook 侧回调可达
yaml
services:
  openclaw:
    image: ghcr.io/openclaw/openclaw:latest
    restart: unless-stopped
    mem_limit: 2g
    ports:
      - "127.0.0.1:18789:18789"
    volumes:
      - ${HOME}/.openclaw:/home/node/.openclaw
    env_file:
      - .env
    healthcheck:
      test: ["CMD", "curl", "-f", "http://127.0.0.1:18789/health"]
      interval: 60s
      timeout: 15s
      retries: 5
      start_period: 360s

在笔记本上长期跑 Gateway 往往被休眠、合盖与不稳定上行拖累;纯靠家用宽带也很难给出可验收 SLA。相较之下,按周期计费的云端 Mac Mini 节点更适合承载「需要与 VPS 上 OpenClaw 协同、又要图形或 Xcode 侧操作」的混合工作流。

常见误区:0.0.0.0:18789 当作「方便调试」;在公网 VPS 上这等于把控制面暴露给扫描器。

若你希望Docker 网关稳定在线,同时把重编译或真机相关步骤放到可合同化的 macOS 环境,继续维护自购固定资产往往在采购与多地同步上不占优。对需要7×24 可验收节点与弹性规格 的场景,VpsMesh 的 Mac Mini 云端租赁通常是更优解:把 VPS 上的 OpenClaw 与专用远程 Mac 的分工写进架构图,再用价格页订购页做容量评审,比口头承诺更容易落地。

FAQ

常见问题

多数情况下应先对照宿主 dmesgmem_limit 是否触发 OOM;同时预留首轮 WASM 编译窗口。资源基线可与OpenClaw v2026.4 安装长文中的建议一起评审。

优先在 openclaw.jsongateway.controlUi.allowedOrigins 列出真实 HTTPS 来源,并确认反代没有把错误的 Host 传到上游。更完整的安装与 doctor 流程见Gateway 安装排障清单

使用 docker compose exec 进入与 Gateway 相同用户与卷挂载后再执行 openclaw devices list;仍异常时对照运行期三段式排障。需要评审节点规格时可打开价格页订购页;远程连通条目见帮助中心