OpenClaw 沙盒跨目录访问终极方案(mount --bind 零配置法)
# 问题
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
# 执行后重启服务或服务器生效
2
用户组没权限的话沙盒直接起不来。
# 2. 清理多余配置
如果之前在 openclaw.json 里配过 agents.defaults.sandbox.docker.binds,全部删掉。
openclaw config unset agents.defaults.sandbox.docker.binds
配置越干净,踩坑越少。
# 3. 在 workspace 下创建挂载点
mkdir -p /home/openclaw/.openclaw/workspace/blog
mkdir -p /home/openclaw/.openclaw/workspace/nginx
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
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
# 在文件最底部追加上面两行
2
3
4
# 6. 重启 Gateway
openclaw gateway restart
# 效果
重启后发 /new 开新会话,外部目录已经无缝融入 Agent 的工作空间。
直接对 Agent 说就行:
- "帮我检查一下当前目录 nginx 文件夹里的配置文件"
- "帮我修改 blog 文件夹下的前端代码"
所有修改实时同步回宿主机真实目录,Agent 甚至不需要知道那些复杂的绝对路径。
# 注意事项
mount --bind挂载的目录权限继承自源目录,确保 openclaw 用户有读写权限- 如果源目录不存在,bind mount 会失败,先确认路径
- 卸载用
sudo umount /home/openclaw/.openclaw/workspace/blog,记得先清理 fstab