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。

在 Mac 云主机上使用 Docker 与沙箱隔离运行 OpenClaw 网关的示意图

本文要点

1. 适用边界:不要为了「听起来更安全」默认上 Sandboxes

若你只是个人试用、改两行配置、或强依赖宿主 GUI/本地工具链,裸机 npm 或官方一键脚本往往迭代更快。若你已有一套跑稳的 docker compose,且威胁模型主要是「别误删宿主目录」,常规容器 + 只读根文件系统 + 资源上限可能已经足够。

  1. 更倾向 Sandboxes 的信号:多用户共享一台 Mac 云、要给技能/插件加默认不可信假设、需要出口白名单或代理统一注入密钥、合规要求把「代理能访问的网域」写进审计材料。
  2. 仍优先裸机/Compose 的信号:频繁改源码调试、需要挂载整块 workspace 做大量本地 IO、或团队尚未把 Docker 版本与 Sandboxes 相关 CLI 行为钉死在镜像里。
  3. Mac 云特有点:无桌面、套餐内存封顶、磁盘与 Docker 数据根在同一卷——Sandboxes 的额外抽象会放大 IO 与内存预算压力,基线要一起算。

2. 对照表:裸机 / 常规容器 / Sandboxes

下表用于架构评审幻灯片,可直接复制;具体 flag 以你安装的 Docker 与 OpenClaw 发行说明为准。

维度裸机 / npm常规 docker run / ComposeDocker Sandboxes 思路
隔离强度依赖用户与权限模型命名空间/cgroup,需正确配 cap、只读层更强默认边界,出口与密钥注入可中心化
可观测性直接看进程与日志路径docker logs、inspect、健康检查多一层代理/侧车,需统一关联 request id
升级路径包管理器/脚本拉镜像、compose 版本钉死同步钉 Sandbox 运行时与 OpenClaw 镜像
性能开销最低中高(视实现与策略)
典型代价宿主被误操作风险卷 uid、DNS、OOM(见站内专文)策略配错导致「全站不可达」类故障
与站内 Exit 137 文的关系:Sandboxes 不替代内存与卷权限排查;若容器仍 OOM,先回到该文的 cgroup/compose 内存与 ~/.openclaw 挂载检查,再调 Sandbox 策略。

3. 落地步骤(≥5 步):从钉版本到健康检查

下列顺序强调「可审计」,省略具体镜像名以免与你的 fork 不一致;请替换为当前官方文档推荐标签。

  1. 钉死三角:Docker Engine/CLI 版本、OpenClaw 镜像 digest、Sandbox 策略版本(若有)写入 Runbook,CI 或 Ansible 只部署该三元组。
  2. 分离卷职责:配置目录、workspace、日志目录分卷或分子路径;避免把宿主整个 home 挂进沙箱。权限仍建议对齐容器内运行用户(常见 uid 1000)。
  3. 声明资源上限:为网关进程设内存与 CPU 上限,并预留约 20% 余量给短时模型突发;Mac 云若同机还跑构建,显式错峰。
  4. 网络与出口:列出 OpenClaw 必需的域名(模型 API、通道 Webhook、包索引等),其余默认拒绝或走企业代理;密钥经代理或运行时注入,避免写进只读层镜像。
  5. 健康检查与启动顺序18789(或你映射的端口)在宿主与容器内分别探测;start_period 覆盖冷启动拉模型或编译缓存的时间。
  6. 验收快照:保存一次「成功启动」的 openclaw status 输出、关键环境变量哈希(不含密钥)与 Sandboxes 策略文件版本号,便于回滚对比。

示意(伪代码级,勿照抄为生产唯一真值):

# 原则:镜像只读 + 明确卷 + 资源上限 + 健康检查 # docker ... run \ # --read-only \ # --tmpfs /tmp:rw,size=512m \ # -v openclaw-config:/home/node/.openclaw \ # --memory=4g --cpus=2 \ # --health-cmd="curl -fsS http://127.0.0.1:18789/health || exit 1"

4. Mac 云 7×24:日志、重启策略与防火墙

云上默认没有人在屏幕前点「允许」,因此要把自动重启日志轮转写进 launchd 或 systemd 外层编排:内层容器策略变更失败时,避免无限重启风暴——用指数退避或熔断告警。

安全组/防火墙需同时放行:SSH 管理面、网关映射端口、以及企业代理出口。若你只放行 22 与 18789 却忘了模型 API 的 HTTPS 出口,症状与 DNS 问题极像,优先用「容器内 curl -v 对照宿主机」分层。

5. 可引用基线(经验值,需按套餐调整)

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 策略接成一条完整链路。