2026 年用 Docker Sandboxes 隔离运行 OpenClaw:与裸机 / 常规 docker run 对照的基线、资源边界与排障 FAQ(Mac 云 7×24)
社区与官方材料都在推「在 Sandboxes 里跑 OpenClaw」:更强隔离、可控出口、密钥不必直接进容器文件系统。但你可能已经读过站内「Docker Exit 137 / 卷权限」文——Sandboxes 并不会 magically 消灭 OOM 与 DNS,只是换了安全与排障的优先级。本文给适用边界、三张形态对照表、可复现的落地步骤(≥5 步)、Mac 云侧日志与 18789 防火墙衔接,以及「先 Sandboxes 还是先 openclaw doctor」的分流 FAQ。
本文要点
1. 适用边界:不要为了「听起来更安全」默认上 Sandboxes
若你只是个人试用、改两行配置、或强依赖宿主 GUI/本地工具链,裸机 npm 或官方一键脚本往往迭代更快。若你已有一套跑稳的 docker compose,且威胁模型主要是「别误删宿主目录」,常规容器 + 只读根文件系统 + 资源上限可能已经足够。
- 更倾向 Sandboxes 的信号:多用户共享一台 Mac 云、要给技能/插件加默认不可信假设、需要出口白名单或代理统一注入密钥、合规要求把「代理能访问的网域」写进审计材料。
- 仍优先裸机/Compose 的信号:频繁改源码调试、需要挂载整块 workspace 做大量本地 IO、或团队尚未把 Docker 版本与 Sandboxes 相关 CLI 行为钉死在镜像里。
- Mac 云特有点:无桌面、套餐内存封顶、磁盘与 Docker 数据根在同一卷——Sandboxes 的额外抽象会放大 IO 与内存预算压力,基线要一起算。
2. 对照表:裸机 / 常规容器 / Sandboxes
下表用于架构评审幻灯片,可直接复制;具体 flag 以你安装的 Docker 与 OpenClaw 发行说明为准。
| 维度 | 裸机 / npm | 常规 docker run / Compose | Docker Sandboxes 思路 |
|---|---|---|---|
| 隔离强度 | 依赖用户与权限模型 | 命名空间/cgroup,需正确配 cap、只读层 | 更强默认边界,出口与密钥注入可中心化 |
| 可观测性 | 直接看进程与日志路径 | docker logs、inspect、健康检查 | 多一层代理/侧车,需统一关联 request id |
| 升级路径 | 包管理器/脚本 | 拉镜像、compose 版本钉死 | 同步钉 Sandbox 运行时与 OpenClaw 镜像 |
| 性能开销 | 最低 | 中 | 中高(视实现与策略) |
| 典型代价 | 宿主被误操作风险 | 卷 uid、DNS、OOM(见站内专文) | 策略配错导致「全站不可达」类故障 |
~/.openclaw 挂载检查,再调 Sandbox 策略。
3. 落地步骤(≥5 步):从钉版本到健康检查
下列顺序强调「可审计」,省略具体镜像名以免与你的 fork 不一致;请替换为当前官方文档推荐标签。
- 钉死三角:Docker Engine/CLI 版本、OpenClaw 镜像 digest、Sandbox 策略版本(若有)写入 Runbook,CI 或 Ansible 只部署该三元组。
- 分离卷职责:配置目录、workspace、日志目录分卷或分子路径;避免把宿主整个 home 挂进沙箱。权限仍建议对齐容器内运行用户(常见 uid 1000)。
- 声明资源上限:为网关进程设内存与 CPU 上限,并预留约 20% 余量给短时模型突发;Mac 云若同机还跑构建,显式错峰。
- 网络与出口:列出 OpenClaw 必需的域名(模型 API、通道 Webhook、包索引等),其余默认拒绝或走企业代理;密钥经代理或运行时注入,避免写进只读层镜像。
- 健康检查与启动顺序:
18789(或你映射的端口)在宿主与容器内分别探测;start_period覆盖冷启动拉模型或编译缓存的时间。 - 验收快照:保存一次「成功启动」的
openclaw status输出、关键环境变量哈希(不含密钥)与 Sandboxes 策略文件版本号,便于回滚对比。
示意(伪代码级,勿照抄为生产唯一真值):
4. Mac 云 7×24:日志、重启策略与防火墙
云上默认没有人在屏幕前点「允许」,因此要把自动重启与日志轮转写进 launchd 或 systemd 外层编排:内层容器策略变更失败时,避免无限重启风暴——用指数退避或熔断告警。
安全组/防火墙需同时放行:SSH 管理面、网关映射端口、以及企业代理出口。若你只放行 22 与 18789 却忘了模型 API 的 HTTPS 出口,症状与 DNS 问题极像,优先用「容器内 curl -v 对照宿主机」分层。
5. 可引用基线(经验值,需按套餐调整)
- 内存:仅网关+轻量通道时,许多团队以 4GB 容器上限为起点;并发技能或本地模型同机时上调到 8GB+ 并单独监控。
- 磁盘:镜像层、Sandbox 临时空间与日志建议独立于系统卷;低于约 10GB 可用时拒绝自动升级任务。
- CPU:为避免与
xcodebuild同机争用,网关容器 2 vCPU 起,并用 cgroup 保证最低份额。 - 端口:对公网暴露网关时务必叠加鉴权与配对策略;仅内网则优先 SSH 隧道收敛暴露面(与站内生产加固文一致)。
6. FAQ:启动失败时先查 Sandboxes 还是先 doctor?
问:容器秒退,日志只有一行权限错误? 先卷与 uid,再看 Sandboxes 是否禁止了写路径——顺序与 Exit 137 专文一致。
问:进程在但通道全挂? 先 DNS/出口白名单,再 openclaw doctor 看网关与通道配置分层。
问:升级 OpenClaw 后 Sandbox 策略失效? 比对发行说明中网络与文件路径变更;保留上一份策略 Git 标签可快速 diff。
完全在笔记本上跑 Sandboxes 易受睡眠与本地策略影响;纯 Windows/WSL 混搭又常带来路径与权限长尾。Docker 抽象层虽能统一交付,但会增加排障维度与性能折损——当你要把 OpenClaw 当7×24 业务网关而不是玩具时,在专用 Apple 硬件上的 Mac 云节点通常比临时拼凑环境更省心:SSH 习惯与 Linux 运维对齐,同时保留官方工具链与稳定内核组合。若你已在常规 Docker 上踩过 OOM 与卷权限坑,可继续阅读站内 OpenClaw Docker 典型故障修复文,把 cgroup、DNS 与 doctor 阶梯和本文 Sandbox 策略接成一条完整链路。