默认本地后端:其受限默认值、GPU 与 Docker-out-of-Docker 约束,以及沙箱浏览器容器¶
Docker 后端¶
Docker 后端通过 docker CLI 在本地运行工具。其选择与错误行为保持不变;它不会探测 Podman,也不会回退到 Podman。
默认值:network: "none"(无出口)、readOnlyRoot: true、capDrop: ["ALL"],镜像为 openclaw-sandbox:bookworm-slim。
此显式配置保持代理工作区为只读,并保留默认的受限运行时姿态:
{
agents: {
defaults: {
sandbox: {
mode: "all",
backend: "docker",
scope: "session",
workspaceAccess: "ro",
docker: {
image: "openclaw-sandbox:bookworm-slim",
readOnlyRoot: true,
tmpfs: ["/tmp", "/var/tmp", "/run"],
network: "none",
capDrop: ["ALL"],
},
},
},
},
}
OpenClaw 创建的 Docker 沙箱容器还包含 init 进程并启用 no-new-privileges。当 workspaceAccess: "ro" 时,代理工作区以只读方式挂载到 /agent;对代理工作区的写入操作将被拒绝,而配置的 tmpfs 路径保持可写。
文件工具需要宿主机支持的绑定挂载。tmpfs 或镜像卷可能会隐藏工作区绑定挂载下方的文件;文件工具会将这些路径报告为仅容器路径,而不会读取被隐藏的宿主机文件。请使用 exec 访问该存储。当更深的显式绑定在容器中可见时,文件工具访问会被恢复。通过符号链接访问的挂载目标,或具有不同后端存储的叠加挂载,在无法从容器的挂载表确定其宿主机映射时,也需要使用 exec。
对于最近使用过的容器,更改绑定源或访问模式,或更改绑定下方的 tmpfs 目标或只读模式,都需要作用域级重建。其他 tmpfs 选项(如 size、mode 和 uid)保持正常的配置更改行为:运行中的容器会继续运行并收到重建通知,而已停止或过期的容器会被替换。请显式重建以立即应用这些选项。
要暴露宿主机 GPU,请将 agents.defaults.sandbox.docker.gpus(或按代理覆盖的设置)设置为 "all" 或 "device=GPU-uuid" 之类的值。该值会传递给所选容器引擎的 Docker 兼容 --gpus 标志,并且需要兼容的宿主机 GPU 配置。Podman 需要 5.0 或更高版本才能使用此选项。
Warning
Docker-out-of-Docker (DooD) 约束
如果 Gateway 在 Docker 中运行,它会通过宿主机的 Docker socket 创建同级沙箱容器。
请保持 openclaw.json 中的工作区路径相对于 Gateway 文件系统,例如 /home/node/.openclaw/workspace。
OpenClaw 会自动将受管工作区、代理工作区和技能挂载转换为 Docker 宿主机的路径。
Shell 和浏览器容器使用相同的映射规则。
嵌套的 Gateway 绑定也会被映射,并保留其只读权限。
- 将工作区和 OpenClaw 状态目录绑定挂载到 Gateway 中。它们的宿主机路径与 Gateway 路径可以不同。
- 使用运行 Gateway 的 Docker 守护进程。OpenClaw 在信任守护进程的挂载表之前会验证其容器身份。
- 受管源及其可见的嵌套挂载必须来自绑定挂载。命名卷、tmpfs 以及 Gateway 镜像中的文件不支持作为同级沙箱挂载的源。
- 可写的沙箱需要可写的 Gateway 绑定。对于只读的 Gateway 源,请使用
workspaceAccess: "ro"。 - 显式的
sandbox.docker.binds和sandbox.browser.binds保留其宿主机路径约定。OpenClaw 不会转换这些由操作员提供的源。 -
更改 Gateway 的挂载或 Docker 连接后,请重启 Gateway。如果现有沙箱具有不同的挂载,OpenClaw 会报告作用域级的
sandbox recreate命令。 最近使用过的容器会持续运行,直到您重建它们,但 OpenClaw 拒绝复用它们过期的挂载。 -
Codex 代码模式:当 OpenClaw 沙箱处于活动状态时,OpenClaw 会在该轮次禁用 Codex app-server 原生 Code Mode、用户 MCP 服务器以及应用支持的插件执行(这些是从 Gateway 宿主的 app-server 进程运行的,而非 OpenClaw 沙箱后端),除非沙箱工具策略暴露了所需工具,并且您选择启用实验性的沙箱 exec-server 路径。此时 Shell 访问会通过 OpenClaw 沙箱支持的工具(如
sandbox_exec和sandbox_process)进行路由。请勿将宿主机 Docker socket 挂载到代理沙箱容器或自定义 Codex 沙箱中。完整行为请参阅 Codex Harness。
在启用了 Docker 沙箱模式的 Ubuntu/AppArmor 宿主机上,Codex app-server 的 workspace-write shell 执行需要沙箱容器内的非特权用户命名空间;当服务用户无法创建这些命名空间时,可能会在 shell 启动前失败。当 Docker 沙箱出口被禁用(network: "none",默认值)时,这还需要非特权网络命名空间。常见症状:bwrap: setting up uid map: Permission denied 和 bwrap: loopback: Failed RTM_NEWADDR: Operation not permitted。运行 openclaw doctor;如果它报告 Codex bwrap 命名空间探测失败,请优先使用能为 OpenClaw 服务进程授予所需命名空间的 AppArmor 配置文件。kernel.apparmor_restrict_unprivileged_userns=0 是一种全局回退方案,但存在安全权衡;仅当该宿主机安全姿态可接受时才使用。
沙箱浏览器¶
- 当浏览器工具需要时,沙箱浏览器会自动启动(确保 CDP 可访问)。通过
agents.defaults.sandbox.browser.autoStart(默认true)和autoStartTimeoutMs(默认 12 秒)进行配置。 - 沙箱浏览器容器使用专用的 Docker 网络(
openclaw-sandbox-browser),而非全局的bridge网络。通过agents.defaults.sandbox.browser.network进行配置。 - 不支持沙箱浏览器的
"none"网络模式,因为浏览器控制需要宿主机发布的 CDP 端口。请使用专用默认网络、bridge或其他自定义 bridge 网络。openclaw doctor --fix会禁用受影响的持久化 sidecar,并恢复专用网络,而不会静默启用出口流量。 agents.defaults.sandbox.browser.cdpSourceRange使用 CIDR 允许列表(例如172.21.0.1/32)限制容器边缘的 CDP 入站流量。- noVNC 观察者访问默认受密码保护;OpenClaw 会生成一个短期有效的令牌 URL,该 URL 提供本地引导页面,并通过 URL 片段(而非查询字符串或头部日志)携带密码打开 noVNC。
agents.defaults.sandbox.browser.allowHostControl(默认false)允许沙箱会话显式以宿主机浏览器为目标。- 可选的允许列表对
target: "custom"进行门控:allowedControlUrls、allowedControlHosts、allowedControlPorts。
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw