
我最近在琢磨一件事:公司里要是铺开一堆 AI Agent(比如 OpenClaw),它们能读邮件、改文件、调 API,真出事了谁来兜?
翻了下最近的资料,发现 Red Hat 一位工程师 Sally O'Malley 已经把这个痛点做成了开源项目------Tank-OS。它最打动我的点不是"又多了个工具",而是思路很实在:既然 Agent 危险,那就别让它碰系统,把它关进一个只读的、隔离的"盒子"里,而且这个盒子本身还是个可以一键回滚的镜像。
这篇文章不是官方宣传稿。我从一个普通使用者的视角,把它的原理、部署方式和适用场景捋一遍,顺手记几个值得注意的点。

它到底在解决什么
先说 Agent 是什么。OpenClaw 是一个跑在你本机或服务器上的开源 AI Agent 框架(GitHub 上 4 万+ Star),它能替你操作电脑:发邮件、改文件、跑命令。能力越大越危险------社区里已经有人反馈 Agent 误删过工作邮件、把用户数据改乱了。
当你要在公司里批量跑几十、上百台 Agent 机器时,传统"apt 装一下 + 写个配置文件"的玩法有四个绕不开的坑:
| 坑 | 具体表现 |
|---|---|
| 凭证不安全 | API Key 写在明文配置文件里,别的进程一读就走光 |
| 版本不一致 | 每台机器 OS、依赖版本不同,Agent 行为对不上,排查头皮发麻 |
| 故障不隔离 | Agent 进程崩了或被攻破,直接拖垮宿主 |
| 没法批量管 | 没有统一方式把更新推到整个舰队 |
Tank-OS 的解法就一句话:把 Agent、运行时、OS、Systemd 单元和升级机制,全部打包进一个 OCI 容器镜像,然后直接拿这个镜像把整台机器启动起来。
下面这张图把两种结构摆在一起看更直观:

左边是传统玩法,右边是 Tank-OS:OS 变成只读的,Agent 跑在无 root 的容器里,密钥进加密保险柜。
核心思路:把 OS 当成一个容器
打个比方:传统部署像"在毛坯房里现场搭家具",每家搭得都不一样,还随时可能被租客砸了墙;Tank-OS 像"出厂就装好的精装集装箱",一模一样、墙是混凝土的、钥匙另存。
支撑这个思路的两个关键技术:
- bootc(Boot Container) :把整个 Linux 操作系统当成一个 OCI 容器镜像来管。更新不是去
apt upgrade逐个改文件,而是整体换一个镜像。 - rootless Podman Quadlet:用无 root 权限的 Podman 跑容器,由 Systemd 直接管理生命周期。容器里的 root 其实只是宿主机上的一个普通用户,提不了权。
几个我比较看重的特性
- 不可变操作系统:根文件系统只读挂载,Agent 想改系统文件?改不了。
- rootless 容器:Agent 被攻破也提不了权到宿主。
- 事务性更新:更新要么整成功,要么整回滚,不会出现"更新到一半机器废了"的中间态。
- 凭证进加密保险柜:API Key 走 Podman secret store,不落明文文件、不当环境变量裸奔。
- 多实例:一台机器能跑好几个互相隔离的 Agent。
- 多架构:预构建镜像同时支持 amd64 和 arm64。
- cloud-init 原生支持:SSH 密钥开机注入,不烤进镜像。
项目本身不大:GitHub 上 104 Star、11 Fork,代码主要是 Shell(81.7%)和 Dockerfile(18.3%),MIT 协议。作者说是个周末项目,但技术选型全是 Red Hat 的生产级工具,文档体系完整。
为什么说"升级也不会丢数据"
这是我觉得最巧妙的设计:严格区分不可变层 和可变层。

- 不可变层(OS 镜像)放系统软件、配置、tank-os 脚本和 Quadlet 声明;
- 可变层放 OpenClaw 的会话历史、Podman 配置和加密密钥。
执行 bootc upgrade 时只换不可变层,你的会话和密钥原封不动------升级 Agent 版本,但保留所有聊天记录和配置。
API Key 到底是怎么被保护的
很多人担心:密钥总得给 Agent 吧?Tank-OS 的流程是"全程不落明文":

- 首次启动,cloud-init 读取云平台或本地的 user-data;
- tank-os 的 bootstrap 脚本把 API Key 写进 rootless Podman 的 secret store(加密);
- Quadlet 启动容器时,通过
Secret=指令把密钥当环境变量注入; - 密钥从头到尾没以明文出现在文件系统或进程环境里。
对比传统的 .env 文件,secret store 走系统密钥链加密,普通文件读取拿不到内容。
更新和回滚,一条命令的事
bootc 的更新模型和手机 OTA 的 A/B 分区类似:新版本写进备用分区,重启后切换,失败就留在原分区。

实际命令很简单:
# 首次切换:换到最新镜像
sudo bootc switch --apply quay.io/sallyom/tank-os:latest
# 后续更新:拉新版本并应用
sudo bootc upgrade --apply
出事了?一条 bootc rollback 回到上一个 OS + Agent 版本,不用手动卸载重装。
一台机器跑多个 Agent
如果你像我一样,想一个 Agent 处理工作、一个做研究,Tank-OS 支持多实例,彼此隔离:

每个实例有独立的容器名、Systemd 服务、数据目录(~/.openclaw-research/)、端口和 secret 命名空间,互相看不到对方的文件和密钥。切换也很简单:
# 默认实例
openclaw doctor
# 指定实例
openclaw --container openclaw-research doctor
# 或用环境变量固定默认实例
export OPENCLAW_CONTAINER=openclaw-research
openclaw doctor
实际部署:从镜像到 SSH 登录
不想本地编译的话,直接用预构建镜像 quay.io/sallyom/tank-os:latest(支持 amd64 / arm64)生成虚拟磁盘:
# 创建输出目录
mkdir -p out-tank-os
# 准备 SSH 公钥注入配置
cat > config.json << 'EOF'
{
"blueprint": {
"customizations": {
"user": [
{
"name": "openclaw",
"groups": ["wheel"],
"key": "ssh-ed25519 AAAA...你的公钥..."
}
]
}
}
}
EOF
# 构建 QCOW2 磁盘镜像(需要 rootful Podman)
sudo podman run \
--rm \
--privileged \
--pull=newer \
-v ./config.json:/config.json \
-v ./out-tank-os:/output \
-v /var/lib/containers/storage:/var/lib/containers/storage \
quay.io/centos-bootc/bootc-image-builder:latest \
--type qcow2 \
--config /config.json \
quay.io/sallyom/tank-os:latest
# 产物:out-tank-os/qcow2/disk.qcow2
拿到磁盘后启动虚拟机,用 openclaw 用户(非 root)SSH 进去操作:
# 以 openclaw 用户登录
ssh openclaw@<vm-ip>
# 检查 Agent 状态
openclaw gateway status --deep
# 跑健康检查
openclaw doctor
# 拿 Dashboard 地址
openclaw dashboard --no-open
# 看已连接设备
openclaw devices list
和 NVIDIA NemoClaw 比,怎么选
技术社区常拿它和 NVIDIA 的 NemoClaw 比,两者思路不同:
| 维度 | Tank-OS | NVIDIA NemoClaw |
|---|---|---|
| 核心技术 | Fedora bootc + rootless Podman | Docker + 嵌入式 K3s 集群 |
| OS 不可变 | 完整(分区级) | 无 |
| 凭证隔离 | Podman secret store | L7 代理层注入 |
| 安全策略 | OS 级隔离 | seccomp + Landlock + 网络命名空间多层策略 |
| 更新机制 | 原子镜像替换(可回滚) | 标准容器更新 |
| 适用场景 | 企业舰队(标准 IT 运维) | 研究 / 高安全精细策略 |
| 部署复杂度 | 低(单镜像、标准 VM 工具) | 高(K3s 集群) |
简单说:想要"把 Agent 当标准 IT 基础设施来管",选 Tank-OS;要"多层精细安全策略",上 NemoClaw。
谁适合、谁先等等
适合:
- 公司 IT 要批量部署 OpenClaw 舰队,有统一管理和合规要求;
- DevOps / SRE 对不可变基础设施感兴趣;
- 已经在用 RHEL / Fedora 生态的团队。
先别急:
- 如果只是本地偶尔玩玩,直接跑 OpenClaw 更省事;
- 没有 Linux 容器 / Systemd 基础的话,上手成本不低。
名词速查表
- OCI 镜像:容器镜像的开放标准格式,Docker / Podman 都认。
- bootc:Red Hat 的项目,把容器镜像变成可启动、可更新的 Linux 系统。
- Podman:Red Hat 出的容器工具,无守护进程、支持无 root 运行。
- rootless:容器不以 root 跑,即使被攻破也拿不到宿主权限。
- Quadlet:用 Systemd 单元文件语法声明容器,由 Systemd 管生命周期。
- Systemd:Linux 的初始化和服务管理系统。
- cloud-init:云服务器首次启动时的标准化初始化工具,常用于注入 SSH 密钥。
- QCOW2:QEMU 虚拟机的磁盘镜像格式。
- 事务性更新:更新要么全成要么全回滚,没有中间态。
- secret store:加密存放密钥的地方,不落地明文。
相关资源
- GitHub:github.com/LobsterTrap/tank-os
- 预构建镜像:quay.io/sallyom/tank-os:latest(amd64 / arm64)
- 构建文档 / CLI 文档 / 模型提供商配置:仓库
docs/目录下 - 相关报道:TechCrunch(2026-04-28)、Red Hat 官方博客《Building a hardened, image-based foundation for AI agents》
说到底,Tank-OS 不是什么黑科技,它就是把 bootc、rootless Podman、Systemd 这些成熟工具正确组合了一下,解决了"Agent 太强、容易越界"这个真实问题。我挺欣赏这种思路:与其指望 Agent 永远不犯错,不如从架构上让它犯不了错。
如果你已经在公司用 OpenClaw,这个项目值得作为参考架构翻一翻。