OpenClaw 沙盒指南

概述

OpenClaw 可以在 Docker 容器内运行工具以减少爆炸半径。这是可选的,通过配置控制(agents.defaults.sandboxagents.list[].sandbox)。如果沙盒关闭,工具在主机上运行。

Gateway 留在主机上;启用时工具执行在隔离的沙盒中运行。

这不是完美的安全边界,但当模型做傻事时,它实质性地限制了文件系统和进程访问。


什么被沙盒化

  • 工具执行(exec、read、write、edit、apply_patch、process 等)
  • 可选沙盒浏览器(agents.defaults.sandbox.browser

默认情况下,当浏览器工具需要时,沙盒浏览器自动启动(确保 CDP 可访问)。

配置通过 agents.defaults.sandbox.browser.autoStartagents.defaults.sandbox.browser.autoStartTimeoutMs

未被沙盒化:

  • Gateway 进程本身
  • 任何显式允许在主机上运行的工具(例如 tools.elevated

提升的 exec 在主机上运行并绕过沙盒。


模式

agents.defaults.sandbox.mode 控制何时使用沙盒:

模式 说明
"off" 无沙盒
"non-main" 仅沙盒非主会话(如果您想要主机上的正常聊天的默认值)
"all" 每个会话在沙盒中运行

注意: "non-main" 基于 session.mainKey(默认 “main”),不是代理 id。群组/频道会话使用自己的键,因此它们被视为非主并被沙盒化。


范围

agents.defaults.sandbox.scope 控制创建多少容器:

范围 说明
"session"(默认) 每个会话一个容器
"agent" 每个代理一个容器
"shared" 一个容器由所有沙盒会话共享

工作区访问

agents.defaults.sandbox.workspaceAccess 控制沙盒可以看到什么:

访问级别 说明
"none"(默认) 工具看到 ~/.openclaw/sandboxes 下的沙盒工作区
"ro" 以只读方式在 /agent 挂载代理工作区(禁用 write/edit/apply_patch)
"rw" 以读/写方式在 /workspace 挂载代理工作区

入站媒体被复制到活动沙盒工作区(media/inbound/*)。


自定义绑定挂载

agents.defaults.sandbox.docker.binds 将额外的宿主机目录挂载到容器中。

格式: host:container:mode(例如 "/home/user/source:/source:rw"

示例:

{
  "agents": {
    "defaults": {
      "sandbox": {
        "docker": {
          "binds": [
            "/home/user/source:/source:ro",
            "/var/run/docker.sock:/var/run/docker.sock"
          ]
        }
      }
    }
  }
}

启用沙盒

{
  "agents": {
    "defaults": {
      "sandbox": {
        "mode": "non-main",
        "scope": "session",
        "workspaceAccess": "none",
        "docker": {
          "image": "openclaw-sandbox:bookworm-slim",
          "network": "none",
          "user": "1000:1000"
        }
      }
    }
  }
}

构建默认沙盒镜像

scripts/sandbox-setup.sh

这使用 Dockerfile.sandbox 构建 openclaw-sandbox:bookworm-slim

注意:默认镜像不包括 Node。如果技能需要 Node(或其他运行时),要么烘焙自定义镜像,要么通过 sandbox.docker.setupCommand 安装(需要网络出口 + 可写根 + root 用户)。


工具策略 + 逃生口

工具允许/拒绝策略在沙盒规则之前仍然适用。如果工具被全局或每个代理拒绝,沙盒不会恢复它。

tools.elevated 是一个显式逃生口,在主机上运行 exec。


多代理覆盖

每个代理可以覆盖沙盒 + 工具:

{
  "agents": {
    "list": [
      {
        "id": "personal",
        "sandbox": { "mode": "off" }
      },
      {
        "id": "public",
        "sandbox": {
          "mode": "all",
          "scope": "agent",
          "workspaceAccess": "none"
        },
        "tools": {
          "allow": ["read"],
          "deny": ["write", "edit", "exec"]
        }
      }
    ]
  }
}

来源: https://docs.openclaw.ai/gateway/sandboxing

作者:十一张  创建时间:2026-03-08 22:35
最后编辑:十一张  更新时间:2026-03-28 11:57