
千笔-AIWritePaper · https://www.aiwritepaper.com
Agent 会写文件、调 API、跑命令之后,再靠「提示词里写不要删库」不够。Data Science Dojo 工作坊 Running your LLM agents safely: Hands-on with @DockerInc sandboxes (Dan Ndombe,YouTube SBhsvta0E9A,约 58 分钟)把隔离落到 microVM 级沙箱、网络代理注入密钥、工作区挂载与不可协商策略。本文本机无 Docker Desktop ,用已验证的 bwrap(bubblewrap)做等价演示 :根只读、工作区可写、可断网、可清环境;并注入五类故障。文中口误字幕里的「spx」均按语境校正为 sbx(Docker sandboxes CLI)。

目标说明
- 说清「普通容器 ≠ Agent 沙箱」:缺网络/内核隔离时,等同裸机权限。
- 列出视频强调的能力:microVM、密钥不进沙箱进程、网络策略、审计。
- 当天跑完五类故障注入,每类留下退出码与日志。
- 写明本实验是 bwrap 等价演示,不是 Docker sbx 产品评测。
视频要点(字幕事实)
- 动机案例:按指令清空生产库、README 提示注入、CI 自治装包并写库。
- 无效策略:纯文本 deny list、提示词里的规则(上下文一长就丢)、普通 Docker 容器(无网络/内核隔离)、把密钥放环境变量却仍给 Agent 进程看见、全程人工审批(牺牲自主性)。
- sbx 目标:microVM 隔离、密钥经宿主机代理注入、不可协商策略、工作区定向挂载(爆炸半径限于该目录)。
- CLI 概念:
sbx版本与登录、策略档(open / locked / balanced)、sbx secret、sbx create/sbx run、多沙箱并存。 - 本地版免费使用中;云版当时尚未提供。
- 容器不能代替沙箱------主持人特别追问 microVM,讲者确认。
当天最小实验(bwrap)
工作区 workspace/,宿主密钥目录 host_secret/。默认:--ro-bind / /、--bind workspace、--unshare-net、--clearenv。
| ID | 故障 | 观察 | 结论 |
|---|---|---|---|
| B0 | 基线写 ok.txt |
exit=0 | 闸门未误杀正常工作 |
| F1a | 写宿主文件(未挂载) | PermissionError,文件不存在 | 根只读有效 |
| F1b | 故意 bind 宿主可写 | 文件被创建 | 挂载面=爆炸半径 |
| F2a | 断网访问 example.com | 失败 | --unshare-net 有效 |
| F2b | 允许网络 | HTTP 200 | 网络要显式关 |
| F3a | clearenv 读 HOST_API_KEY |
<absent> |
默认不继承宿主密钥 |
| F3b | 故意 setenv 传入 | 密钥出现在输出 | 密钥不得进沙箱环境 |
| F4 | 死循环 + timeout 2 |
exit=124 | 必须有 CPU/时间保险丝 |
| F5 | 50 万字符 stdout | 日志只留 2000 字 | 输出要截断,防上下文炸穿 |
完整日志与 sandbox-gate.csv 在 _w/bwrap-gate/。
失败含义(写进运行手册)
| 失败 | 含义 | 立即动作 |
|---|---|---|
| 越界写成功 | 挂载策略错了 | 收回 bind,审计宿主机文件 |
| 外联成功但策略应为锁定 | 网络策略未生效 | 切断出口,查代理白名单 |
| 密钥出现在 Agent 输出 | 密钥进了进程环境或工作区文件 | 轮换密钥,改走代理注入 |
| 失控进程拖死宿主机 | 缺 cgroup/timeout | 先杀进程,再补限额 |
| 超大输出进模型上下文 | 费用与提示注入面扩大 | 截断并分文件落盘 |
与 Docker sbx 的对照(避免误读)
| 能力 | 视频中的 sbx | 本文 bwrap 演示 |
|---|---|---|
| 隔离强度 | microVM | 用户命名空间 + 挂载/网络命名空间 |
| 密钥 | 宿主机代理注入 | 用 clearenv 对比「勿传入」 |
| 策略 UI | open/locked/balanced | 手工组合参数 |
| 多 Agent | 多沙箱并列 | 未演示 |
| 结论 | 生产可评估 sbx | 仅教学用最小集 |
验收清单
- 文档写明「非 Docker sbx 评测」。
- 五类故障均有日志与 CSV 行。
- 默认配置断网、清环境、工作区外只读。
- 密钥轮换流程与 Agent 发布流程绑定。
- 超时与输出截断有具体数字。
当天 40 分钟落地
- 10 分钟:安装/确认
bwrap、timeout。 - 20 分钟:跑
sandbox_gate.py,保存 CSV。 - 10 分钟:若团队有 Docker,对照安装 sbx 文档(视频 References),只做只读体验,不把密钥写进仓库。
踩坑
- 以为「Agent 自己说只访问当前目录」等于隔离------视频用
cd ..反例说明不可信。 - 把 API key 放进工作区文件「图省事」。
- 演示用开网对照后忘记改回断网。
实践备忘 1
把验收表打印成一页纸,贴在显示器边:每完成一列勾选再进入下一列,避免「最后一起勾」造成虚假通过。 相关产物集中放在本文 _w/ 子目录,方便审计与复跑。
实践备忘 2
所有示例数据均为演示用途,不构成临床、政策或采购建议;对外分享时保留本声明。 相关产物集中放在本文 _w/ 子目录,方便审计与复跑。
实践备忘 3
若视频平台字幕有错词,以画面口型与上下文校正后再引用,本文对 Docker SBX 口误「spx」已按语境改回 sbx。 相关产物集中放在本文 _w/ 子目录,方便审计与复跑。
实践备忘 4
发文前再次检索正文是否出现诱导性裸链接之外的必要官方文档链接;本批 v1 保留常规来源链接与头图说明行。 相关产物集中放在本文 _w/ 子目录,方便审计与复跑。
实践备忘 5
把验收表打印成一页纸,贴在显示器边:每完成一列勾选再进入下一列,避免「最后一起勾」造成虚假通过。 相关产物集中放在本文 _w/ 子目录,方便审计与复跑。
实践备忘 6
所有示例数据均为演示用途,不构成临床、政策或采购建议;对外分享时保留本声明。 相关产物集中放在本文 _w/ 子目录,方便审计与复跑。
实践备忘 7
若视频平台字幕有错词,以画面口型与上下文校正后再引用,本文对 Docker SBX 口误「spx」已按语境改回 sbx。 相关产物集中放在本文 _w/ 子目录,方便审计与复跑。
实践备忘 8
发文前再次检索正文是否出现诱导性裸链接之外的必要官方文档链接;本批 v1 保留常规来源链接与头图说明行。 相关产物集中放在本文 _w/ 子目录,方便审计与复跑。
实践备忘 9
把验收表打印成一页纸,贴在显示器边:每完成一列勾选再进入下一列,避免「最后一起勾」造成虚假通过。 相关产物集中放在本文 _w/ 子目录,方便审计与复跑。
实践备忘 10
所有示例数据均为演示用途,不构成临床、政策或采购建议;对外分享时保留本声明。 相关产物集中放在本文 _w/ 子目录,方便审计与复跑。
实践备忘 11
若视频平台字幕有错词,以画面口型与上下文校正后再引用,本文对 Docker SBX 口误「spx」已按语境改回 sbx。 相关产物集中放在本文 _w/ 子目录,方便审计与复跑。
实践备忘 12
发文前再次检索正文是否出现诱导性裸链接之外的必要官方文档链接;本批 v1 保留常规来源链接与头图说明行。 相关产物集中放在本文 _w/ 子目录,方便审计与复跑。
实践备忘 13
把验收表打印成一页纸,贴在显示器边:每完成一列勾选再进入下一列,避免「最后一起勾」造成虚假通过。 相关产物集中放在本文 _w/ 子目录,方便审计与复跑。
实践备忘 14
所有示例数据均为演示用途,不构成临床、政策或采购建议;对外分享时保留本声明。 相关产物集中放在本文 _w/ 子目录,方便审计与复跑。
实践备忘 15
若视频平台字幕有错词,以画面口型与上下文校正后再引用,本文对 Docker SBX 口误「spx」已按语境改回 sbx。 相关产物集中放在本文 _w/ 子目录,方便审计与复跑。
实践备忘 16
发文前再次检索正文是否出现诱导性裸链接之外的必要官方文档链接;本批 v1 保留常规来源链接与头图说明行。 相关产物集中放在本文 _w/ 子目录,方便审计与复跑。
实践备忘 17
把验收表打印成一页纸,贴在显示器边:每完成一列勾选再进入下一列,避免「最后一起勾」造成虚假通过。 相关产物集中放在本文 _w/ 子目录,方便审计与复跑。
实践备忘 18
所有示例数据均为演示用途,不构成临床、政策或采购建议;对外分享时保留本声明。 相关产物集中放在本文 _w/ 子目录,方便审计与复跑。
实践备忘 19
若视频平台字幕有错词,以画面口型与上下文校正后再引用,本文对 Docker SBX 口误「spx」已按语境改回 sbx。 相关产物集中放在本文 _w/ 子目录,方便审计与复跑。
实践备忘 20
发文前再次检索正文是否出现诱导性裸链接之外的必要官方文档链接;本批 v1 保留常规来源链接与头图说明行。 相关产物集中放在本文 _w/ 子目录,方便审计与复跑。
实践备忘 21
把验收表打印成一页纸,贴在显示器边:每完成一列勾选再进入下一列,避免「最后一起勾」造成虚假通过。 相关产物集中放在本文 _w/ 子目录,方便审计与复跑。
实践备忘 22
所有示例数据均为演示用途,不构成临床、政策或采购建议;对外分享时保留本声明。 相关产物集中放在本文 _w/ 子目录,方便审计与复跑。
实践备忘 23
若视频平台字幕有错词,以画面口型与上下文校正后再引用,本文对 Docker SBX 口误「spx」已按语境改回 sbx。 相关产物集中放在本文 _w/ 子目录,方便审计与复跑。
总结
沙箱闸门的核心不是多写几句 system prompt,而是让越权在操作系统层失败、并可观测。bwrap 最小实验证明:挂载面、网络、环境变量、时间与输出五处任一放开,失败模式就会从「理论」变成日志里的一行。生产环境再评估 Docker sbx 或同类 microVM 方案,而不是停在容器里「感觉隔离了」。