必须用tmpfs挂载的关键路径包括/tmp、/var/log及其子目录、/run和/app/cache等高频可丢弃写入路径,需显式设size限制(如日志16m~32m、缓存64m~128m)、启用noexec/nosuid增强安全,并配合--memory-swappiness=0禁用swap回写以保护闪存寿命。
在边缘节点(如工控网关、摄像头终端、车载设备)中,普遍使用emmc、sd卡或小容量ssd作为存储介质。这类闪存设备写入寿命有限(通常仅数千次p/e周期),而容器默认将日志、临时文件、缓存等持续刷盘,极易加速磨损。tmpfs 挂载正是针对这一痛点的轻量级解决方案——它把本该落盘的临时数据转向内存,从源头切断无效写入。
哪些路径必须用tmpfs挂载
重点拦截高频、可丢弃、非持久化的写入路径:
- /tmp:应用生成的临时文件(如解压包、中间产物)
- /var/log 或子目录(如 /var/log/nginx、/var/log/app):避免日志持续刷写闪存
- /run 和 /var/run:进程PID、socket文件、状态锁等运行时数据
- /app/cache 或自定义缓存路径:如Redis本地缓存、模型推理中间结果
挂载时必须设 size 限制
边缘设备内存紧张,不设上限的 tmpfs 可能吃光 RAM 导致 OOM。务必显式指定 size= 参数,按实际负载保守估算:
- 纯日志场景(如Nginx):size=16m~32m 足够缓冲数小时日志
- 带缓存的应用(如轻量AI服务):size=64m~128m,视缓存对象大小调整
- 多容器共存时,所有 tmpfs 总和建议不超过主机内存的 20%~30%
配合 noexec,nosuid 提升安全性
边缘设备物理暴露风险高,防止恶意利用临时目录执行代码:
- noexec:禁止在 tmpfs 目录中运行二进制文件(如上传的脚本)
- nosuid:忽略 setuid/setgid 位,阻断提权路径
- 示例完整命令:
docker run -d --name sensor-app \
--tmpfs /tmp:rw,noexec,nosuid,size=32m \
--tmpfs /var/log/app:rw,noexec,nosuid,size=16m \
--tmpfs /run:rw,noexec,nosuid,size=8m \
sensor-image:edge
补充防护:禁用容器内 swap 写入
tmpfs 支持交换到磁盘,但边缘设备上 swap 文件若落在闪存卡上,反而加剧磨损。启动容器时加 --memory-swappiness=0 禁用 swap 回写:
- 该参数强制内核优先回收 page cache,而非换出到 swap
- 与 tmpfs 配合,确保所有临时数据始终留在 RAM 中,不触碰闪存
- 适用于内存 ≥512MB 的常见边缘设备










