🐳 Docker Sandbox — 安全沙箱运行

v1.0.0

基于 Docker 创建隔离沙箱 VM,安全运行不可信代码、探索依赖包或隔离智能体负载。支持 Claude、Codex、Copilot、Gemini、Kiro 等主流智能体,可精细控制网络代理与挂载策略,一键启停、快照与模板管理,让开发测试无惧风险。

5· 4.5k·25 当前·27 累计
下载技能包 项目主页
License
MIT-0
最后更新
2026/2/28
0
安全扫描
VirusTotal
无害
查看报告
OpenClaw
可疑
medium confidence
该技能的说明基本符合其宣称用途(创建 Docker 沙箱),但多项设计选择——尤其是暴露 Docker socket 与挂载主机工作空间——削弱了所谓的“安全”隔离,需谨慎使用。
评估建议
本技能文档介绍了如何在 Docker 沙箱中运行代码,但使用前请注意:1)把项目挂载进容器并暴露 /run/docker.sock 会打破大部分隔离保障——避免挂载敏感主机路径,除非确有需要,否则不要暴露 Docker socket。2)优先采用默认拒绝的网络策略与显式白名单(SKILL.md 支持);运行未知代码前先测试规则。3)验证系统中“docker sandbox”插件的来源与行为(技能除 Docker 文档链接外无主页/源码)。4)先用小型、非敏感实验确认沙箱实际暴露的内容(文件挂载、socket、网络)。5)若需更强隔离,请使用独立 VM 或不暴露主机 Docker 守护进程/主机文件的沙箱方案。6)若对插件或 Docker 配置无把握,勿在含敏感数据或凭据的机器上运行不受信代码。...
详细分析 ▾
用途与能力
名称/描述与说明一致:SKILL.md 仅记录使用“docker sandbox”工作流,并依赖 docker 二进制文件。然而建议的默认行为(通过 virtiofs 将主机工作空间挂载进沙箱,并在沙箱内提供 Docker socket)赋予的权限高于“安全”沙箱预期,可能破坏隔离。
指令范围
运行指令让智能体创建挂载主机路径并包含主机 Docker socket(/run/docker.sock)的沙箱。这些操作使沙箱内进程可访问主机文件并控制 Docker 守护进程(已知的主机逃逸/提权向量)。文档还指示在沙箱内运行任意智能体代码,并建议设置环境变量与代理钩子——若配置不当,可能泄露主机数据或网络访问。
安装机制
仅提供指令(无安装规范、无下载产物)。因技能本身不会写入任何新内容,仅指示使用现有 docker 二进制,故安装风险较低。
凭证需求
技能不要求外部凭据或环境变量。然而其描述的环境(工作空间挂载、代理证书、Docker socket)为沙箱内进程提供了对主机资源的广泛访问,与“安全”运行不受信代码的声明不相称。
持久化与权限
always 为 false 且无安装,因此技能本身不要求持续特权存在。但智能体使用 Docker 命令可创建长期运行的沙箱、快照与模板;结合主机路径挂载与 Docker socket,若操作者允许,将赋予智能体在主机上显著的间接持久化/特权能力。
安装前注意事项
  1. 理解把项目挂载进容器并暴露 /run/docker.sock 会打破大部分隔离保障——避免挂载敏感主机路径,除非确有需要,否则不要暴露 Docker socket。
  2. 优先采用默认拒绝的网络策略与显式白名单(SKILL.md 支持);运行未知代码前先测试规则。
  3. 验证系统中“docker sandbox”插件的来源与行为(技能除 Docker 文档链接外无主页/源码)。
  4. 先用小型、非敏感实验确认沙箱实际暴露的内容(文件挂载、socket、网络)。
  5. 若需更强隔离,请使用独立 VM 或不暴露主机 Docker 守护进程/主机文件的沙箱方案。
  6. 若对插件或 Docker 配置无把握,勿在含敏感数据或凭据的机器上运行不受信代码。
安全有层次,运行前请审查代码。

License

MIT-0

可自由使用、修改和再分发,无需署名。

运行时依赖

🖥️ OSLinux · macOS · Windows

版本

latestv1.0.02026/2/4

首次发布 - Docker Desktop 沙箱 VM 管理,支持安全智能体执行、网络代理控制、工作空间挂载与故障排查指南。

无害

安装命令

点击复制
官方npx clawhub@latest install docker-sandbox
镜像加速npx clawhub@latest install docker-sandbox --registry https://cn.longxiaskill.com

技能文档

# Docker 沙盒 使用 Docker Desktop 的沙盒功能,在隔离的 VM 环境中运行 agent 和命令。每个沙盒都拥有自己的轻量级 VM,具备文件系统隔离、网络代理控制,并通过 virtiofs 挂载工作区。 ## 何时使用 - 在系统范围安装前,探索不受信任的软件包或技能 - 安全地运行来自外部的任意代码 - 在不影响宿主机的前提下,测试破坏性操作 - 隔离需要网络访问控制的agent 工作负载 - 为实验搭建可复现的环境 ## 要求 - Docker Desktop 4.49+ 并安装 docker sandbox 插件 - 验证:docker sandbox version ## 快速开始 ### 为当前项目创建沙盒 ``bash docker sandbox create --name my-sandbox claude . ` 这将创建一个 VM 隔离的沙盒,包含: - 通过 virtiofs 挂载的当前目录 - 预装的 Node.js、git 和标准开发工具 - 带白名单控制的网络代理 ### 在内部运行命令 `bash docker sandbox exec my-sandbox node --version docker sandbox exec my-sandbox npm install -g some-package docker sandbox exec -w /path/to/workspace my-sandbox bash -c "ls -la" ` ### 直接运行 agent `bash # 一步创建并运行 docker sandbox run claude . -- -p "What files are in this project?" # 使用 -- 传递 agent 参数 docker sandbox run my-sandbox -- -p "Analyze this codebase" ` ## 命令参考 ### 生命周期 `bash # 创建沙盒(agent 支持:claude、codex、copilot、gemini、kiro、cagent) docker sandbox create --name # 在沙盒中运行 agent(如不存在则自动创建) docker sandbox run [-- ...] docker sandbox run [-- ...] # 执行命令 docker sandbox exec [options] [args...] -e KEY=VAL # 设置环境变量 -w /path # 设置工作目录 -d # 分离(后台)运行 -i # 交互模式(保持 stdin 打开) -t # 分配伪终端 # 停止但不删除 docker sandbox stop # 删除(销毁 VM) docker sandbox rm # 列出所有沙盒 docker sandbox ls # 重置所有沙盒 docker sandbox reset # 将快照保存为可复用的模板 docker sandbox save ` ### 网络控制 沙盒内置网络代理以控制出站访问。 `bash # 允许特定域名 docker sandbox network proxy --allow-host example.com docker sandbox network proxy --allow-host api.github.com # 阻止特定域名 docker sandbox network proxy --block-host malicious.com # 阻止 IP 段 docker sandbox network proxy --block-cidr 10.0.0.0/8 # 对特定主机绕过代理(直连) docker sandbox network proxy --bypass-host localhost # 设置默认策略(默认允许或拒绝所有) docker sandbox network proxy --policy deny # 先拒绝所有,再加白名单 docker sandbox network proxy --policy allow # 先允许所有,再加黑名单 # 查看网络活动 docker sandbox network log ` ### 自定义模板 `bash # 使用自定义容器镜像作为基础 docker sandbox create --template my-custom-image:latest claude . # 将当前沙盒状态保存为模板以供复用 docker sandbox save my-sandbox ` ## 工作区挂载 宿主机上的工作区路径通过 virtiofs 挂载进沙盒。沙盒内部挂载路径保持宿主机路径结构: | 宿主机 OS | 宿主机路径 | 沙盒路径 | |---|---|---| | Windows | H:\Projects\my-app | /h/Projects/my-app | | macOS | /Users/me/projects/my-app | /Users/me/projects/my-app | | Linux | /home/me/projects/my-app | /home/me/projects/my-app | agent 的主目录为 /home/agent/,其中包含一个软链接的 workspace/ 目录。 ## 沙盒内部环境 每个沙盒 VM 包含: - Node.js(v20.x LTS) - Git(最新版) - Python(系统版) - curlwget 及标准 Linux 工具 - npm(全局安装目录位于 /usr/local/share/npm-global/) - Docker socket(位于 /run/docker.sock——支持 Docker-in-Docker) ### 代理配置(自动设置) ` HTTP_PROXY=http://host.docker.internal:3128 HTTPS_PROXY=http://host.docker.internal:3128 NODE_EXTRA_CA_CERTS=/usr/local/share/ca-certificates/proxy-ca.crt SSL_CERT_FILE=/usr/local/share/ca-certificates/proxy-ca.crt ` 重要:Node.js 的 fetch(undici)默认不读取 HTTP_PROXY 环境变量。若 npm 包使用 fetch,请创建 require 钩子: `javascript // /tmp/proxy-fix.js const proxy = process.env.HTTPS_PROXY || process.env.HTTP_PROXY; if (proxy) { const { ProxyAgent } = require('undici'); const agent = new ProxyAgent(proxy); const origFetch = globalThis.fetch; globalThis.fetch = function(url, opts = {}) { return origFetch(url, { ...opts, dispatcher: agent }); }; } ` 运行方式:node -r /tmp/proxy-fix.js your-script.js ## 使用模式 ### 安全地探索软件包 `bash # 创建隔离沙盒 docker sandbox create --name pkg-test claude . # 仅允许访问 npm 仓库 docker sandbox network proxy pkg-test --policy deny docker sandbox network proxy pkg-test --allow-host registry.npmjs.org docker sandbox network proxy pkg-test --allow-host api.npmjs.org # 安装并检查该包 docker sandbox exec pkg-test npm install -g suspicious-package docker sandbox exec pkg-test bash -c "find /usr/local/share/npm-global/lib/node_modules/suspicious-package -name '*.js' | head -20" # 查看安装后脚本、网络调用、文件访问 docker sandbox network log pkg-test # 清理 docker sandbox rm pkg-test ` ### 持久开发环境 `bash # 一次性创建 docker sandbox create --name dev claude ~/projects/my-app # 跨会话使用 docker sandbox exec dev npm test docker sandbox exec dev npm run build # 保存为模板供团队共享 docker sandbox save dev ` ### 锁定式 agent 执行 `bash # 默认拒绝网络,仅允许必要访问 docker sandbox create --name secure claude . docker sandbox network proxy secure --policy deny docker sandbox network proxy secure --allow-host api.openai.com docker sandbox network proxy secure --allow-host github.com # 在限制下运行 agent docker sandbox run secure -- -p "Review this code for security issues" ` ## 故障排查 ### “client version X is too old” 请将 Docker Desktop 升级至 4.49+。沙盒插件需要 engine API v1.44+。 ### 沙盒内 “fetch failed” Node.js fetch 不使用代理。请使用上方 proxy-fix.js require 钩子,或改用 curl`bash docker sandbox exec my-sandbox curl -sL https://api.example.com/data ` ### Windows 上路径转换(Git Bash / MSYS2) Git Bash 会将 /path 转换为 C:/Program Files/Git/path。在命令前加: `bash MSYS_NO_PATHCONV=1 docker sandbox exec my-sandbox ls /home/agent ` ### Docker 更新后沙盒无法启动 `bash docker sandbox reset # 清除所有沙盒状态 ``

数据来源ClawHub ↗ · 中文优化:龙虾技能库