启用--read-only后,用--tmpfs可安全恢复/tmp、/run、/var/log等目录写权限:如--tmpfs /tmp:rw,noexec,nosuid,size=64m,数据内存驻留、不落盘、启动即就绪,且需通过mount、touch、df验证生效。
当容器启用 --read-only 后,整个根文件系统变为只读,但应用仍需写入某些目录(如 /tmp、/run、/var/log)。tmpfs 是最直接、安全且无需依赖宿主机路径的恢复写权限方式——它在内存中创建可写挂载点,不持久化、不落盘、启动即就绪。
指定路径挂载 tmpfs 实现按需可写
只需在 docker run 中用 --tmpfs 显式挂载目标路径即可覆盖只读限制。例如:
-
--tmpfs /tmp:rw,noexec,nosuid,size=64m:为临时目录提供 64MB 内存空间,禁止执行和特权位 -
--tmpfs /run:rw,size=16m:满足 systemd、supervisord 等服务存放 PID 文件和 socket 的需求 -
--tmpfs /var/log:rw,size=32m:让日志写入正常进行,后续可由日志收集器异步导出
关键参数必须明确设置
仅写 --tmpfs /tmp 不够稳妥,推荐始终带上权限与资源控制参数:
在 Linux 上通过 Docker 运行 OpenClaw,并使用 Tailscale 实现远程访问。⚠️ 涉及 sudo、Docker、Tailscale和凭证挂载——请先查阅安全章节...
-
rw:显式声明可读写(虽然默认是 rw,但写明更清晰) -
noexec:防止恶意脚本在/tmp执行,提升安全性 -
nosuid:忽略 setuid/setgid 位,避免提权风险 -
size=XXm:严格限制内存用量(如size=50m),避免 tmpfs 耗尽主机内存
验证是否生效
进入容器后执行以下命令确认:
-
mount | grep tmpfs→ 查看是否挂载成功且含rw -
touch /tmp/test && ls -l /tmp/test→ 测试能否创建文件 -
df -h /tmp→ 检查 size 限制是否生效(显示为 tmpfs 类型,大小接近设定值)
与其他挂载方式的区别
tmpfs 和绑定挂载(-v)、命名卷(-v name:/path)不同:
- 不依赖宿主机目录权限,彻底避开 UID/GID 匹配问题
- 数据仅驻留内存,容器停止即清空,适合敏感或临时内容
- 无法跨容器共享(除非用
--tmpfs /path:shared,但极少使用) - 仅支持 Linux 主机;Docker Desktop(macOS/Windows)底层不支持,会静默降级或报错










