tmpfs 挂载是什么
tmpfs 把容器里的某个目录挂到宿主内存上:读写不经过磁盘,速度快,容器停止后内容自动清空,也不会写进容器的可写层。它适合放密钥、会话文件、高频小文件缓存这类“不需要持久化”的数据,也常用来给 /dev/shm 扩容。代价是容量来自宿主内存,写得多会把压力转移到宿主机上,因此容量必须显式规划,不能当成免费空间随意开大。
基本信息
| 语法 | docker run --tmpfs /tmp:size=256m,mode=1777 镜像 |
|---|---|
| mount 形式 | --mount type=tmpfs,dst=/cache,tmpfs-size=64m,tmpfs-mode=0700 |
| 适用平台 | 仅 Linux 容器;Windows 容器不支持 tmpfs 挂载 |
| 生命周期 | 随容器存在,容器停止或删除后内容消失,不落磁盘 |
| 容量 | 不写 size 表示不加限制,写入量直接消耗宿主内存 |
| 与数据卷区别 | 数据卷落宿主磁盘可持久;tmpfs 只在内存里,重启即清 |
典型使用场景
- 把运行期生成的密钥或令牌放内存,避免落盘与进入镜像层
- 会话文件与短期缓存:读得频繁但丢了可以重建
- 给 /dev/shm 扩容,解决默认 64MB 不够导致的崩溃
- 高频小文件写入场景:避免拖慢宿主机磁盘与影响其他业务
- 合规要求不留痕的临时数据,容器销毁即无残留
使用示例
使用示例
docker run -d --name app --tmpfs /tmp:size=256m,mode=1777 nginx:1.27 # 临时目录走内存
docker run --rm --mount type=tmpfs,dst=/run/cache,tmpfs-size=64m,tmpfs-mode=0700 alpine sh -c 'df -h /run/cache' # mount 写法
docker run -d --memory=512m --tmpfs /tmp:size=128m myapp:1.2.3 # 与内存限制一起做容量规划
docker exec app df -h /tmp # 容器内确认挂载与容量
docker inspect --format '{{json .HostConfig.Tmpfs}}' app # 复核实际挂载参数挂载方式对照
| 方式 | 持久性 | 存放位置 | 典型用途 |
|---|---|---|---|
| tmpfs | 容器停止即无 | 宿主内存 | 密钥、会话、缓存 |
| 匿名卷 | 容器删除即无 | 宿主磁盘 | 镜像内声明的临时目录 |
| 命名卷 | 持久,可跨容器复用 | 宿主磁盘 | 数据库与业务数据 |
| 绑定挂载 | 持久,直连宿主路径 | 宿主磁盘指定路径 | 配置与日志目录 |
tmpfs 消耗的是宿主内存:容量设得大、写入又多时,压力落在宿主机上,可能先出现整机内存紧张,而不是容器被判定为内存超限。
Windows 容器不支持 tmpfs 挂载:跨平台项目要准备替代方案,例如应用层缓存目录或显式声明内存盘。