---
summary: "agents.defaults.sandbox 块:映像、安装、工作区模式和网络策略"
read_when:
- "在容器内运行嵌入式代理"
- "选择沙箱工作区模式或网络策略"
- "构建或固定沙箱映像"
title: "配置——代理沙箱"
---
`agents.defaults.sandbox` 完整:嵌入式代理的图像选择、工作区模式、安装和网络策略。
## `agents.defaults.sandbox`
嵌入式代理的可选沙箱。完整指南请参见 [沙箱](/gateway/sandboxing)。
```json5
{
agents: {
defaults: {
sandbox: {
mode: "non-main", // off (default) | non-main | all
backend: "docker", // docker (default) | openshell | podman | ssh
scope: "agent", // session | agent (default) | shared
workspaceAccess: "none", // none (default) | ro | rw
workspaceRoot: "~/.openclaw/sandboxes",
docker: {
image: "openclaw-sandbox:bookworm-slim",
containerPrefix: "openclaw-sbx-",
workdir: "/workspace",
readOnlyRoot: true,
tmpfs: ["/tmp", "/var/tmp", "/run"],
network: "none",
user: "1000:1000",
capDrop: ["ALL"],
env: { LANG: "C.UTF-8" },
setupCommand: "apt-get update && apt-get install -y git curl jq",
pidsLimit: 256,
memory: "1g",
memorySwap: "2g",
cpus: 1,
gpus: "all",
ulimits: {
nofile: { soft: 1024, hard: 2048 },
nproc: 256,
},
seccompProfile: "/path/to/seccomp.json",
apparmorProfile: "openclaw-sandbox",
dns: ["1.1.1.1", "8.8.8.8"],
extraHosts: ["internal.service:10.0.0.5"],
binds: ["/home/user/source:/source:rw"],
},
ssh: {
target: "user@gateway-host:22",
command: "ssh",
workspaceRoot: "/tmp/openclaw-sandboxes",
strictHostKeyChecking: true,
updateHostKeys: true,
identityFile: "~/.ssh/id_ed25519",
certificateFile: "~/.ssh/id_ed25519-cert.pub",
knownHostsFile: "~/.ssh/known_hosts",
// SecretRefs / inline contents also supported:
// identityData: { source: "env", provider: "default", id: "SSH_IDENTITY" },
// certificateData: { source: "env", provider: "default", id: "SSH_CERTIFICATE" },
// knownHostsData: { source: "env", provider: "default", id: "SSH_KNOWN_HOSTS" },
},
browser: {
enabled: false,
image: "openclaw-sandbox-browser:bookworm-slim",
network: "openclaw-sandbox-browser",
cdpPort: 9222,
cdpSourceRange: "172.21.0.1/32",
vncPort: 5900,
noVncPort: 6080,
headless: false,
noVncEnabled: true,
allowHostControl: false,
autoStart: true,
autoStartTimeoutMs: 12000,
},
prune: {
idleHours: 24,
maxAgeDays: 7,
},
},
},
},
tools: {
sandbox: {
tools: {
allow: [
"exec",
"process",
"read",
"write",
"edit",
"apply_patch",
"sessions_list",
"sessions_history",
"sessions_send",
"sessions_spawn",
"session_status",
],
deny: ["browser", "canvas", "nodes", "cron", "discord", "gateway"],
},
},
},
}
```
上面显示的默认值 (`off`/`docker`/`agent`/`none`/`bookworm-slim` image/`none` network/etc.) 是实际的 OpenClaw 默认值,而不仅仅是说明性值。
**后端:**
- `docker`:本地 Docker 运行时(默认)
- `openshell`:OpenShell-托管本地或远程运行时
- `podman`:使用 Docker- 兼容设置的本地 Podman 运行时
- `ssh`:通用SSH-支持的远程运行时
插件管理的后端在其插件条目下保留运行时特定的设置:
- OpenShell: `plugins.entries.openshell.config`;参见 [OpenShell](/gateway/openshell)
**SSH 后端配置:**
- `target`: 形如 `user@host[:port]` 的 SSH 目标
- `command`: SSH 客户端命令(默认:`ssh`)
- `workspaceRoot`: 用于每个作用域工作区的绝对远程根目录(默认:`/tmp/openclaw-sandboxes`)
- `identityFile` / `certificateFile` / `knownHostsFile`: 传递给 OpenSSH 的现有本地文件
- `identityData` / `certificateData` / `knownHostsData`:内联内容或 OpenClaw 在运行时具体化到临时文件中的 SecretRefs
- `strictHostKeyChecking` / `updateHostKeys`: OpenSSH 主机密钥策略选项(两者默认均为 `true`)
**SSH 认证优先级:**
- `identityData` 优先于 `identityFile`
- `certificateData` 优先于 `certificateFile`
- `knownHostsData` 优先于 `knownHostsFile`
- 基于 SecretRef 的 `*Data` 值会在沙箱会话开始前从活动 secrets 运行时快照中解析
**SSH 后端行为:**
- 在创建或重新创建后会先播种一次远程工作区
- 然后使用远程 SSH 工作区作为事实来源
- 通过 SSH 路由 `exec`、文件工具和媒体路径
- 不会自动把远程更改同步回宿主机
- 不支持沙箱浏览器容器
**工作区访问:**
- `none`: 每个作用域的沙箱工作区位于 `~/.openclaw/sandboxes` 下(默认)
- `ro`: 沙箱工作区位于 `/workspace`,代理工作区以只读方式挂载到 `/agent`
- `rw`:代理工作区安装在 `/workspace` 处的 read/write
**作用域:**
- `session`:每会话一个容器 + 工作区
- `agent`:每个代理一个容器 + 工作区(默认)
- `shared`:共享容器和工作区(无跨会话隔离)
**OpenShell 插件配置:**
```json5
{
plugins: {
entries: {
openshell: {
enabled: true,
config: {
mode: "mirror", // mirror (default) | remote
command: "openshell",
from: "openclaw",
remoteWorkspaceDir: "/sandbox",
remoteAgentWorkspaceDir: "/agent",
gateway: "lab", // optional
gatewayEndpoint: "https://lab.example", // optional
workspace: "research", // optional existing OpenShell workspace
policy: "/etc/openclaw/openshell-policy.yaml", // optional host-side YAML file
providers: ["openai"], // optional
gpu: false,
autoProviders: true,
timeoutSeconds: 120,
},
},
},
},
}
```
**OpenShell 模式:**
- `mirror`:执行前从本地远程播种,执行后同步回;本地工作空间仍然是事实的来源
- `remote`:创建沙箱时远程播种一次,然后使用远程工作区作为事实来源
在 `remote` 模式下,在 OpenClaw 外部进行的主机本地编辑不会在种子步骤后自动同步到沙箱中。将 SSH 传输到 OpenShell 沙箱中,但该插件拥有沙箱生命周期和可选的镜像同步。 `workspace` 为整个插件选择现有的 OpenShell 控制平面工作区;它与代理的文件系统工作区分开。 `policy` 必须指向 OpenClaw 网关可读的 YAML 文件,而不是命名策略 ID。请参阅 [OpenShell](/gateway/openshell) 了解设置、先决条件和故障排除。
**`setupCommand`** 在容器创建后运行一次(通过 `sh -lc`)。需要网络外联、可写 root、root 用户。
**Containers 默认为 `network: "none"`** — 如果代理需要出站访问,则设置为 `"bridge"`(或自定义桥接网络)。 `"host"` 已被阻止。默认情况下,`"container:"` 会被阻止,除非您明确设置 `sandbox.docker.dangerouslyAllowContainerNamespaceJoin: true` (break-glass)。 Codex 应用程序服务器打开活动的 OpenClaw 沙箱,使用相同的出口设置进行本机代码模式网络访问。
**入站附件** 会被暂存到当前工作区中的 `media/inbound/*`。
**`docker.binds`** 会挂载额外的宿主目录;全局和逐代理的 binds 会合并。
**沙盒浏览器**(`sandbox.browser.enabled`,默认`false`):容器中的Chromium + CDP。 `openclaw.json` 中不需要 `browser.enabled`。 noVNC 观察者访问受密码保护,并通过一次性、经过身份验证的引导程序 URL 进行代理。观察者 URL 被故意从模型可见的系统提示上下文中省略。
- `allowHostControl: false`(默认)会阻止沙箱会话定位宿主机浏览器。
- `network` 默认为 `openclaw-sandbox-browser`(专用 bridge 网络)。仅当你明确需要全局 bridge 连接时才设置为 `bridge`。由于 CDP 端口必须发布到宿主机,因此不支持 `"none"`;`"host"` 同样被阻止。升级时,`openclaw doctor --fix` 会禁用受持久化 `"none"` 值影响的 sidecar,并恢复专用网络,而不会在不知情的情况下启用出站访问。
- `cdpSourceRange` 可选地将容器边缘的 CDP 入站连接限制为某个 CIDR 范围(例如 `172.21.0.1/32`)。
- `sandbox.browser.binds` 仅将额外的宿主目录挂载到沙箱浏览器容器中。设置后(包括 `[]`),它会替换浏览器容器的 `docker.binds`。
- 沙箱浏览器容器中的 Chromium 始终以 `--no-sandbox --disable-setuid-sandbox` 启动(容器不具备 Chrome 自有沙箱所需的内核原语);没有用于此设置的配置开关。
- 启动默认值在 `scripts/sandbox-browser-entrypoint.sh` 中定义,并针对容器主机进行了调整:
- `--remote-debugging-address=127.0.0.1`
- `--remote-debugging-port=`
- `--user-data-dir=${HOME}/.chrome`
- `--no-first-run`
- `--no-default-browser-check`
- `--disable-dev-shm-usage`
- `--disable-background-networking`
- `--disable-breakpad`
- `--disable-crash-reporter`
- `--no-zygote`
- `--metrics-recording-only`
- `--password-store=basic`
- `--use-mock-keychain`
- `--disable-3d-apis`、`--disable-gpu` 和 `--disable-software-rasterizer` 默认启用;如果 WebGL/3D 使用需要,可通过 `OPENCLAW_BROWSER_DISABLE_GRAPHICS_FLAGS=0` 禁用它们。
- `--disable-extensions`(默认启用);如果你的工作流依赖扩展,可通过 `OPENCLAW_BROWSER_DISABLE_EXTENSIONS=0` 重新启用扩展。
- `--renderer-process-limit=2` 默认启用;可通过 `OPENCLAW_BROWSER_RENDERER_PROCESS_LIMIT=` 更改,设为 `0` 可使用 Chromium 的默认进程限制。
- `--headless=new` 仅当 `headless` 使能时。
- 默认值为容器镜像基线;如需更改容器默认值,请使用带自定义入口点的自定义浏览器镜像。
沙箱浏览器需要 Docker 引擎。`sandbox.docker.binds` 同时适用于 Docker 和 Podman 后端。
构建镜像(从源码检出构建):
```bash
scripts/sandbox-setup.sh # main sandbox image
scripts/sandbox-browser-setup.sh # optional browser image
```
对于没有源签出的 npm 安装,请参阅 [ 沙箱§图像和设置 ](/gateway/sandboxing#images-and-setup) 以了解内联 `docker build` 命令。