必须显式用 size= 参数限制 tmpfs 大小,否则默认占用主机内存一半易引发 oom;推荐 docker run --tmpfs 指定 size(如 size=100m),并组合 noexec、nosuid 等安全选项。
必须显式用 size= 参数限制,否则默认可占用主机内存的一半,极易引发 oom。
挂载时直接指定 size 限制
在 docker run 中使用 --tmpfs 并带上 size= 选项是最直接有效的方式:
-
--tmpfs /tmp:rw,noexec,nosuid,size=100m:限制容器内/tmp最多用 100MB 内存 -
--tmpfs /run:size=32m,mode=0755:同时设大小和权限,适合存放运行时状态文件 - 单位支持
k、m、g(如size=2g),不区分大小写
避免默认行为带来的风险
不写 size= 时,Docker 会继承内核 tmpfs 默认策略——上限为 min(50% RAM, 1TB)。这意味着:
使用 Python 脚本下载 Docker 镜像并打包为 tar 文件。用户说“下载镜像”“拉取镜像”“pull xxx”“帮我下载 nginx 镜像”等时触发。支持 SOCKS5 代理直连(推荐)和国内镜像站加速两种模式。
- 一台 64GB 内存的宿主机,单个未限容的 tmpfs 可能吃掉 32GB
- 多个容器叠加后极易触发 OOM Killer 杀死关键进程
- 错误表现为 “No space left on device” 或容器突然退出,而非内存满报错
配合安全与监控进一步加固
仅设 size 不够,还需组合其他控制项:
- 加上
noexec和nosuid,防止临时目录被用于提权或执行恶意代码 - 在 Docker Compose 中统一管理:
tmpfs: ["/tmp:rw,noexec,nosuid,size=100m"] - 通过
docker stats或cgroups监控实际使用量,确认是否接近设定上限










