Docs: update zh-CN translations and pipeline

What:
- update zh-CN glossary, TM, and translator prompt
- regenerate zh-CN docs and apply targeted fixes
- add zh-CN AGENTS pipeline guidance

Why:
- address terminology/spacing feedback from #6995

Tests:
- pnpm build && pnpm check && pnpm test
This commit is contained in:
Josh Palmer
2026-02-03 13:23:00 -08:00
parent 9f03791aa9
commit a3ec2d0734
228 changed files with 10651 additions and 10475 deletions
+61 -69
View File
@@ -1,55 +1,54 @@
---
read_when: 你想深入了解沙箱机制,或需要调整 agents.defaults.sandbox 配置。
read_when: You want a dedicated explanation of sandboxing or need to tune agents.defaults.sandbox.
status: active
summary: OpenClaw 沙箱的工作原理:模式、作用域、工作区访问和镜像
title: 沙箱
summary: OpenClaw 沙箱隔离的工作原理:模式、作用域、工作区访问和镜像
title: 沙箱隔离
x-i18n:
generated_at: "2026-02-01T20:38:47Z"
generated_at: "2026-02-03T07:49:29Z"
model: claude-opus-4-5
provider: pi
source_hash: 184fc53001fc6b2847bbb1963cc9c54475d62f74555a581a262a448a0333a209
source_path: gateway/sandboxing.md
workflow: 14
workflow: 15
---
# 沙箱
# 沙箱隔离
OpenClaw 可以**在 Docker 容器内运行工具**以缩小影响范围。
此功能是**可选的**通过配置控制(`agents.defaults.sandbox`
`agents.list[].sandbox`)。如果沙箱未启用工具将在宿主机上运行。
Gateway网关始终在宿主机上运行;启用沙箱后,工具执行将在隔离的沙箱中进行。
OpenClaw 可以**在 Docker 容器内运行工具**以减少影响范围。
是**可选的**配置控制(`agents.defaults.sandbox` `agents.list[].sandbox`)。如果沙箱隔离关闭,工具在主机上运行。
Gateway 网关保留在主机上;启用工具执行在隔离的沙箱中运行。
并非完美的安全边界,但模型执行了错误操作时,能有效限制文件系统和进程访问。
不是完美的安全边界,但模型做出愚蠢行为时,它实质性地限制文件系统和进程访问。
## 哪些内容会被沙箱隔离
## 什么会被沙箱隔离
- 工具执行(`exec``read``write``edit``apply_patch``process` 等)。
- 可选的沙箱浏览器(`agents.defaults.sandbox.browser`)。
- 默认情况下,沙箱浏览器会在浏览器工具需要时自动启动(确保 CDP 可达)。
通过 `agents.defaults.sandbox.browser.autoStart``agents.defaults.sandbox.browser.autoStartTimeoutMs` 进行配置。
- `agents.defaults.sandbox.browser.allowHostControl` 允许沙箱会话显式访问宿主机浏览器。
- 可选的允许列表`target: "custom"``allowedControlUrls``allowedControlHosts``allowedControlPorts`
- 默认情况下,浏览器工具需要时,沙箱浏览器会自动启动(确保 CDP 可达)。
通过 `agents.defaults.sandbox.browser.autoStart``agents.defaults.sandbox.browser.autoStartTimeoutMs` 配置。
- `agents.defaults.sandbox.browser.allowHostControl` 允许沙箱会话显式定位主机浏览器。
- 可选的允许列表`target: "custom"``allowedControlUrls``allowedControlHosts``allowedControlPorts`
被沙箱隔离的内容
被沙箱隔离:
- Gateway网关进程本身。
- 任何被显式允许在宿主机上运行的工具(例如 `tools.elevated`)。
- **提权 exec 在宿主机上运行,会绕过沙箱。**
- 如果沙箱未启用`tools.elevated` 不会改变执行方式(本身已在宿主机上)。参见[提权模式](/tools/elevated)。
- Gateway 网关进程本身。
- 任何明确允许在主机上运行的工具(例如 `tools.elevated`)。
- **提权 exec 在主机上运行绕过沙箱隔离。**
- 如果沙箱隔离关闭`tools.elevated` 不会改变执行(已经在主机上)。参见[提权模式](/tools/elevated)。
## 模式
`agents.defaults.sandbox.mode` 控制**何时**使用沙箱:
`agents.defaults.sandbox.mode` 控制**何时**使用沙箱隔离
- `"off"`:不使用沙箱。
- `"non-main"`:仅**非主**会话启用沙箱(如果你希望普通聊天在宿主机上运行,这是默认值)。
- `"all"`所有会话都在沙箱中运行。
注意:`"non-main"` 基于 `session.mainKey`(默认 `"main"`),而智能体 ID。
群组/道会话使用各自的键,因此它们被视为非主会话,会被沙箱隔离。
- `"off"`:不使用沙箱隔离
- `"non-main"`:仅沙箱隔离**非主**会话(如果你想让普通聊天在主机上运行,这是默认值)。
- `"all"`每个会话都在沙箱中运行。
注意:`"non-main"` 基于 `session.mainKey`(默认 `"main"`),而不是智能体 ID。
群组/道会话使用它们自己的键,因此它们算作非主会话并将被沙箱隔离。
## 作用域
`agents.defaults.sandbox.scope` 控制**创建多少容器**
`agents.defaults.sandbox.scope` 控制**创建多少容器**
- `"session"`(默认):每个会话一个容器。
- `"agent"`:每个智能体一个容器。
@@ -57,25 +56,23 @@ Gateway网关始终在宿主机上运行;启用沙箱后,工具执行将在
## 工作区访问
`agents.defaults.sandbox.workspaceAccess` 控制**沙箱看到什么**
`agents.defaults.sandbox.workspaceAccess` 控制**沙箱可以看到什么**
- `"none"`(默认):工具 `~/.openclaw/sandboxes` 下的沙箱工作区中运行
- `"ro"`:以只读方式将智能体工作区挂载到 `/agent`(禁用 `write`/`edit`/`apply_patch`)。
- `"rw"`:以读写方式将智能体工作区挂载到 `/workspace`
- `"none"`(默认):工具看到 `~/.openclaw/sandboxes` 下的沙箱工作区。
- `"ro"`:以只读方式 `/agent` 挂载智能体工作区(禁用 `write`/`edit`/`apply_patch`)。
- `"rw"`:以读写方式 `/workspace` 挂载智能体工作区
入站媒体被复制到活动沙箱工作区`media/inbound/*`)。
Skills 说明`read` 工具以沙箱为根目录。当 `workspaceAccess: "none"` 时,
OpenClaw 会将符合条件的 Skills 镜像到沙箱工作区(`.../skills`)中以便读取。当设为 `"rw"` 时,工作区 Skills 可从
`/workspace/skills` 读取。
入站媒体被复制到活动沙箱工作区(`media/inbound/*`)。
Skills 注意事项`read` 工具以沙箱为根。使用 `workspaceAccess: "none"` 时,OpenClaw 将符合条件的 Skills 镜像到沙箱工作区(`.../skills`)以便可以读取。使用 `"rw"` 时,工作区 Skills 可从 `/workspace/skills` 读取。
## 自定义绑定挂载
`agents.defaults.sandbox.docker.binds` 将额外的宿主机目录挂载到容器中。
`agents.defaults.sandbox.docker.binds` 将额外的主机目录挂载到容器中。
格式:`host:container:mode`(例如 `"/home/user/source:/source:rw"`)。
全局和每智能体的绑定挂载会被**合并**(而非替换)。在 `scope: "shared"` 下,每智能体的绑定挂载会被忽略。
全局和每智能体的绑定**合并**的(不是替换)。在 `scope: "shared"` 下,每智能体的绑定被忽略。
示例(只读源码 + Docker 套接字):
示例(只读源码 + docker 套接字):
```json5
{
@@ -103,25 +100,22 @@ OpenClaw 会将符合条件的 Skills 镜像到沙箱工作区(`.../skills`
安全注意事项:
- 绑定挂载会绕过沙箱文件系统:它们以你设置的模式(`:ro``:rw`)暴露宿主机路径。
- 敏感挂载(例如 `docker.sock`、密钥、SSH 密钥)应使用 `:ro`,除非确实需要写入
- 如果你只需要对工作区的读取权限,可与 `workspaceAccess: "ro"` 配合使用;绑定模式保持独立。
- 参见[沙箱 vs 工具策略 vs 提权](/gateway/sandbox-vs-tool-policy-vs-elevated)了解绑定挂载如何与工具策略和提权 exec 交互。
- 绑定绕过沙箱文件系统:它们以你设置的任何模式(`:ro``:rw`)暴露主机路径。
- 敏感挂载(例如 `docker.sock`、密钥、SSH 密钥)应该是 `:ro`,除非绝对必要
- 如果你只需要对工作区的读取访问,请结合 `workspaceAccess: "ro"`;绑定模式保持独立。
- 参见[沙箱 vs 工具策略 vs 提权](/gateway/sandbox-vs-tool-policy-vs-elevated)了解绑定如何与工具策略和提权 exec 交互。
## 镜像 + 设置
默认镜像:`openclaw-sandbox:bookworm-slim`
构建一次即可
构建一次:
```bash
scripts/sandbox-setup.sh
```
注意:默认镜像**不包含** Node。如果 Skills 需要 Node(或
其他运行时),请构建自定义镜像或通过
`sandbox.docker.setupCommand` 安装(需要网络出口 + 可写根文件系统 +
root 用户)。
注意:默认镜像**不**包含 Node。如果 Skills 需要 Node(或其他运行时),要么构建自定义镜像,要么通过 `sandbox.docker.setupCommand` 安装(需要网络出口 + 可写根 + root 用户)。
沙箱浏览器镜像:
@@ -129,48 +123,46 @@ root 用户)。
scripts/sandbox-browser-setup.sh
```
默认情况下,沙箱容器以**无网络**方式运行。
通过 `agents.defaults.sandbox.docker.network` 覆盖。
默认情况下,沙箱容器运行时**没有网络**
通过 `agents.defaults.sandbox.docker.network` 覆盖。
Docker 安装和容器化 Gateway网关的说明在这里
Docker 安装和容器化 Gateway 网关在此
[Docker](/install/docker)
## setupCommand(一次性容器设置)
`setupCommand` 在沙箱容器创建后**运行一次**(不每次运行时都执行)。
`setupCommand` 在沙箱容器创建后**运行一次**(不每次运行)。
它通过 `sh -lc` 在容器内执行。
路径:
- 全局:`agents.defaults.sandbox.docker.setupCommand`
-智能体:`agents.list[].sandbox.docker.setupCommand`
- 每智能体:`agents.list[].sandbox.docker.setupCommand`
常见问题
常见陷阱
- 默认 `docker.network` `"none"`(无出口),因此包安装会失败。
- `readOnlyRoot: true` 阻止写入;设置 `readOnlyRoot: false` 或构建自定义镜像。
- 包安装需要 root 用户(省略 `user` 或设置 `user: "0:0"`)。
- 沙箱 exec **不**继承宿主机 `process.env`使用
`agents.defaults.sandbox.docker.env`(或自定义镜像)来设置 Skills API 密钥。
- 默认 `docker.network` `"none"`(无出口),因此包安装会失败。
- `readOnlyRoot: true` 阻止写入;设置 `readOnlyRoot: false` 或构建自定义镜像。
- `user` 必须是 root 才能安装包(省略 `user` 或设置 `user: "0:0"`)。
- 沙箱 exec **不**继承主机 `process.env`。使用 `agents.defaults.sandbox.docker.env`(或自定义镜像)设置 Skills API 密钥。
## 工具策略 + 逃逸机制
## 工具策略 + 逃逸通道
工具允许/拒绝策略仍在沙箱规则之前生效。如果某个工具在全局或智能体级别被拒绝,沙箱不会将其恢复。
工具允许/拒绝策略仍在沙箱规则之前应用。如果工具在全局或智能体被拒绝,沙箱隔离不会恢复
`tools.elevated` 是一个显式的逃逸机制,在宿主机上运行 `exec`
`/exec` 指令仅授权发送者生效,且在每个会话中持续有效;要彻底禁用
`exec`,请使用工具策略拒绝(参见[沙箱 vs 工具策略 vs 提权](/gateway/sandbox-vs-tool-policy-vs-elevated))。
`tools.elevated` 是一个显式的逃逸通道,在主机上运行 `exec`
`/exec` 指令仅适用于授权发送者并按会话持久化;要硬禁用 `exec`,使用工具策略拒绝(参见[沙箱 vs 工具策略 vs 提权](/gateway/sandbox-vs-tool-policy-vs-elevated))。
调试:
- 使用 `openclaw sandbox explain` 检查当前生效的沙箱模式、工具策略和修复配置
- 参见[沙箱 vs 工具策略 vs 提权](/gateway/sandbox-vs-tool-policy-vs-elevated)了解"为什么被阻止"的思维模型。
保持锁定状态
- 使用 `openclaw sandbox explain` 检查生效的沙箱模式、工具策略和修复配置
- 参见[沙箱 vs 工具策略 vs 提权](/gateway/sandbox-vs-tool-policy-vs-elevated)了解"为什么被阻止?"的心智模型。
保持锁定。
## 多智能体覆盖
每个智能体可以覆盖沙箱和工具配置
`agents.list[].sandbox``agents.list[].tools`以及 `agents.list[].tools.sandbox.tools` 用于沙箱工具策略)。
每个智能体可以覆盖沙箱 + 工具
`agents.list[].sandbox``agents.list[].tools`加上 `agents.list[].tools.sandbox.tools` 用于沙箱工具策略)。
参见[多智能体沙箱与工具](/multi-agent-sandbox-tools)了解优先级。
## 最小启用示例