OpenClaw 沙盒跨目录访问终极方案(mount --bind 零配置法)

4/3/2026 OpenClawDockerLinux运维

# 问题

OpenClaw 默认开启 Docker 沙盒(sandbox.mode: "all"),Agent 只能访问 ~/.openclaw/workspace 目录。想让 Agent 读写宿主机其他路径(网站源码、Nginx 配置等),用软链接在沙盒内会失效,用 docker.binds 配置又容易踩各种路径逃逸拦截的坑。

# 排查

  • 软链接方案:沙盒容器内 symlink 指向的是容器内路径,不会映射到宿主机真实路径,直接 GG
  • docker.binds 方案:OpenClaw 对自定义挂载有严格校验,docker.binds 配置极易触发 path traversal 拦截,报错排查痛苦
  • 关闭沙盒:安全机制直接裸奔,不行

# 最终方案

核心思路:不用软链接,不改 OpenClaw 配置。利用 Linux 原生的 mount --bind,将外部目录直接投射到 workspace 下。OpenClaw 启动沙盒时默认会挂载整个 workspace,这些 bind 好的文件自然就被带进去了。

零 OpenClaw 配置,纯系统级操作。

# 1. 确保 Docker 权限

sudo usermod -aG docker openclaw
# 执行后重启服务或服务器生效
1
2

用户组没权限的话沙盒直接起不来。

# 2. 清理多余配置

如果之前在 openclaw.json 里配过 agents.defaults.sandbox.docker.binds全部删掉

openclaw config unset agents.defaults.sandbox.docker.binds
1

配置越干净,踩坑越少。

# 3. 在 workspace 下创建挂载点

mkdir -p /home/openclaw/.openclaw/workspace/blog
mkdir -p /home/openclaw/.openclaw/workspace/nginx
1
2

这些是 OpenClaw 唯一认可的安全目录。

# 4. 执行 bind mount

sudo mount --bind /srv/projects/blog /home/openclaw/.openclaw/workspace/blog
sudo mount --bind /etc/nginx /home/openclaw/.openclaw/workspace/nginx
1
2

完事之后在 workspace 下 ls,就能看到真实数据了。

# 5. 持久化(推荐)

mount --bind 系统重启后会丢失,写入 /etc/fstab

/srv/projects/blog /home/openclaw/.openclaw/workspace/blog none bind 0 0 /etc/nginx /home/openclaw/.openclaw/workspace/nginx none bind 0 0


```bash
sudo nano /etc/fstab
# 在文件最底部追加上面两行
1
2
3
4

# 6. 重启 Gateway

openclaw gateway restart
1

# 效果

重启后发 /new 开新会话,外部目录已经无缝融入 Agent 的工作空间。

直接对 Agent 说就行:

  • "帮我检查一下当前目录 nginx 文件夹里的配置文件"
  • "帮我修改 blog 文件夹下的前端代码"

所有修改实时同步回宿主机真实目录,Agent 甚至不需要知道那些复杂的绝对路径。

# 注意事项

  1. mount --bind 挂载的目录权限继承自源目录,确保 openclaw 用户有读写权限
  2. 如果源目录不存在,bind mount 会失败,先确认路径
  3. 卸载用 sudo umount /home/openclaw/.openclaw/workspace/blog,记得先清理 fstab