背景

OpenClaw(小龙虾)这波热度起来后,我看到一个明显趋势:很多团队都在做“套壳龙虾”,而云端落地方案基本默认是 Docker 容器。这个选择在早期完全合理,工程心智成本也最低。
但当我自己尝试部署云端 Claude Code 时,问题很快出现了: 如果 3 到 6 个月后 Agent 数量继续爆发,容器方案在资源利用率和存储复用上的浪费会被放大。换句话说,我们需要的不是“把 Agent 装进容器”,而是一个更偏 Agent as a Service 的运行架构。

在 AI Agent 类系统里,常见需求是同时服务大量租户,每个租户都需要“可执行、可隔离、可复现”的运行环境。
传统做法是“每个租户一个 Docker 容器”,这个模型直观,但在高并发场景会遇到两个老问题:

  1. 算力闲置:容器请求的 CPU/内存和真实负载常年不匹配,形成大面积低利用率。
  2. 存储重复:同类租户反复携带相似运行时和依赖,镜像层复用无法完全消掉“每租户可写层 + 项目依赖”带来的重复占用。

在增长侧,Agent 需求已经开始从试验走向规模化。Gartner 在 2025-06-25 的预测里给出两个信号:到 2028 年,日常决策中会有一部分由 Agent 自主完成,企业软件中带 Agent 能力的占比也会提升。
如果再考虑 OpenClaw 这类开源 Agent 基座在 2026 年的快速增长(截至 2026-03-22,GitHub 显示约 329k stars),云端活跃 Agent 实例规模继续上行是可以预期的,容量规划要提前做。

这里整理一种替代方向:Docker 负责交付基础运行面,bwrap 负责进程级隔离,Nix 负责确定性依赖。核心目标不是替代 Docker,而是把“租户级实例”从容器粒度下沉到进程粒度。

一句话架构

单宿主长驻网关 + 每请求/每会话启动 bwrap 沙箱 + 共享只读 Nix Store + 任务时按需激活开发环境。

还有一个对扩容很关键的约束:执行环境尽量无状态,状态都落在租户各自的 workspace 文件里。这样后续做水平扩展时,迁移的是“请求和工作区映射”,不是整套运行时内存态,系统会更稳定。

这个组合把“环境构建成本”与“租户隔离成本”拆开处理:

  1. 构建期:把依赖固化进不可变依赖层(Nix Store)。
  2. 运行期:租户只创建轻量隔离壳(bwrap + namespace)。
  3. 任务期:在隔离壳内按声明激活工具链(而非提前烘焙整镜像)。

设计抽象:四层模型

  1. 分发层(Gateway)
    负责鉴权、路由、会话映射、生命周期管理。
  2. 隔离层(Sandbox)
    用 Linux namespace + 挂载策略构建“最小可运行文件系统视图”。
  3. 依赖层(Nix Store)
    把语言运行时、构建工具、媒体工具等做成可复用、不可变的依赖对象。
  4. 任务层(Task Runtime)
    每次任务在隔离壳内临时激活声明式环境,任务结束即释放执行上下文。

核心算法:一次任务如何被执行

可以抽象成以下流程:

  1. 租户上下文解析:根据用户标识定位其工作区和会话状态。
  2. 工作区就绪检查:若首次访问,复制模板并打初始化标记;否则直接复用。
  3. 沙箱构建
    • 根文件系统使用临时内存层;
    • 仅挂载必要只读系统路径;
    • 挂载租户私有可写目录;
    • 挂载共享只读依赖层;
    • 注入最小环境变量集。
  4. 网络策略选择
    • 需要外网时使用受控出口;
    • 不需要时直接断网。
  5. 任务执行包装:用声明式环境激活器包装真实命令,确保版本与依赖一致。
  6. 结果回传与回收:流式返回输出,进程随父生命周期回收,临时层自动销毁。

这个流程的关键点是:隔离是运行时动作,依赖一致性是构建时资产

与“每租户一个 Docker”相比,真正变化了什么

维度 传统 Docker 多租户 Nix + bwrap 方案
租户实例粒度 容器 进程沙箱
启动成本 需要拉起容器上下文 直接拉起受限进程
依赖复用 镜像层复用,粒度较粗 Store 对象复用,粒度更细
环境一致性 依赖镜像版本管理纪律 依赖由声明式约束直接收敛
隔离手段 容器隔离 namespace + 挂载白名单
资源密度 中等 高(适合大量短任务)
调试方式 进入容器排查 复现同一声明环境排查

从系统视角看,这不是“谁更安全”这么简单,而是把容量瓶颈从容器编排开销迁移到内核进程调度与 I/O 管理

为什么这套架构在 Agent 场景更合适

  1. 任务时长短、启动频繁
    Agent 工具调用通常是秒级或分钟级,进程沙箱比容器重建更匹配。
  2. 依赖组合变化快
    不同任务需要不同语言和工具链,声明式按需激活比维护大量镜像组合更可控。
  3. 需要可复现排障
    同一依赖声明可直接复现现场,减少“线上与本地不一致”。
  4. 需要高租户密度
    共享只读依赖层显著降低重复磁盘占用与冷启动下载。

一个关键点:为什么声明式环境更适合 Agent 系统

很多人把 Nix 当“更难的包管理器”,但在 Agent 系统里它更像环境状态描述

对 Agent 来说,flake.nix 有两个直接收益:

  1. 可读性收益
    Agent 不需要倒推长脚本,只要读取一个声明文件,就能快速知道“可用工具链 + 版本约束 + 运行钩子”。
  2. 可执行性收益
    任务执行时可以按声明激活环境,而不是在运行期重新走一遍 apt-get/curl bash 这类过程式安装流程。

这对自动化系统很关键。过程式脚本的本质是“步骤历史”,声明式文件的本质是“目标状态”。
对于需要频繁决策和自我修正的 Agent,后者通常更容易做静态理解、冲突检测和快速复现。

安全边界如何定义

这类方案的安全性不依赖单一组件,而是依赖“边界叠加”:

  1. 挂载边界:默认不可见,按白名单暴露路径。
  2. 写权限边界:依赖层只读,租户只写自己的工作区。
  3. 进程边界:只能看到沙箱内进程树。
  4. 网络边界:按任务策略选择共享、代理或隔离网络。
  5. 资源边界:通过上层调度系统加 CPU/内存/并发配额。

工程上要注意:bwrap 只解决进程级隔离,不替代宿主级资源治理;资源限制和审计仍要由编排层承担。

成本模型:这套设计把钱花在哪

传统模式常把成本花在:

  1. 容器创建与销毁;
  2. 镜像拉取与层缓存失效;
  3. 多语言依赖重复打包。

Nix + bwrap 模式把成本转移到:

  1. 前置构建和缓存治理;
  2. 依赖声明质量;
  3. 沙箱策略维护(挂载、网络、权限矩阵)。

因此它适合“前期工程化投入换长期密度收益”的团队,不适合一次性脚本型系统。

举个很具体的例子:两个用户都要用 Chrome。
在“每租户一个 Docker”模式里,通常会出现两份安装和两份可写层开销;在 Nix 模式里,只要在 flake.nix 声明该依赖,底层通过 Store 和 binary cache 复用同一份构件。结果是同一依赖只构建/下载一次,磁盘占用和冷启动压力都更可控。

一次真实试错:冷启动慢且时间方差巨大,bwrap 不是瓶颈

落地早期碰到一个很误导的问题:包装后的 gemini-cli 冷启动经常非常慢,而且每次慢的程度不稳定。

第一轮怀疑对象都很“合理”:

  1. 云盘 I/O 抖动;
  2. bwrap 隔离开销;
  3. Nix 环境激活构建延迟。

但逐项排除后发现都不是主因。真正的根因是:gemini-cli 在启动阶段会检查 ripgrep 二进制,找不到时会触发外网下载;而检查路径不是系统 PATH,而是固定的全局目录。
这就导致两件事同时发生:

  1. 冷启动时延受外网状态影响;
  2. 时延方差变大,压测曲线很难稳定。

最终解法是让系统预先满足这个固定路径期望(例如在沙箱里把已有 ripgrep 映射到该路径),把下载行为从运行期移到构建期。
这个案例的教训是:当延迟既慢又抖时,先确认是否存在隐式下载链路,再谈隔离和调度优化。

不适用边界

以下场景不建议优先采用:

  1. 团队没有 Linux 隔离与 Nix 维护经验;
  2. 任务本身是长生命周期服务,更适合直接容器编排;
  3. 强依赖 GPU 设备透传且隔离策略尚未标准化;
  4. 合规要求必须使用成熟容器安全栈的现成认证路径。

迁移策略(从 Docker 走向 Nix + bwrap)

建议分三步,不要一次重构:

  1. 先声明依赖:把当前镜像里的关键运行时迁到声明式依赖层。
  2. 再下沉实例粒度:把“每租户容器”改为“每租户沙箱进程”。
  3. 最后补齐治理:完善资源配额、审计日志、失败回收和压测基线。

这样可以保留 Docker 的交付稳定性,同时逐步获得高密度运行能力。

总结

这条路线的本质是:
Docker 继续做系统交付,Nix 负责依赖确定性,bwrap 负责租户执行隔离。

当系统目标是“高并发短任务 + 多语言工具链 + 强复现能力”时,这种分层组合通常比“每租户一个 Docker 容器”更经济;但前提是你愿意为声明式依赖和隔离策略投入长期工程纪律。

参考资料

  1. Gartner(2025-06-25)Agentic AI 预测:
    https://www.gartner.com/en/newsroom/press-releases/2025-06-25-gartner-predicts-over-40-percent-of-agentic-ai-projects-will-be-canceled-by-end-of-2027
  2. CAST AI(2025)Kubernetes 利用率与浪费数据(厂商样本,作趋势参考):
    https://cast.ai/press-release/new-kubernetes-cost-benchmark-report-reveals-persistent-cloud-waste/
  3. CNCF(2026-01-20)Cloud Native Survey(K8s in production 82%):
    https://www.cncf.io/reports/the-cncf-annual-cloud-native-survey/
  4. OpenClaw GitHub 仓库(热度观测,数据随时间变化):
    https://github.com/openclaw/openclaw