tmpfs 挂载

绑定挂载 允许您在主机和容器之间共享文件,以便即使在容器停止后也能持久保存数据。

如果您在 Linux 上运行 Docker,则还有第三个选项:tmpfs 挂载。当您使用 tmpfs 挂载创建容器时,容器可以在容器的可写层之外创建文件。

与卷和绑定挂载相反,tmpfs 挂载是临时的,仅持久保存在主机内存中。当容器停止时,tmpfs 挂载将被移除,写入其中的文件将不会持久保存。

tmpfs on the Docker host

这对于临时存储您不希望持久保存到主机或容器可写层中的敏感文件非常有用。

tmpfs 挂载的限制

  • 与卷和绑定挂载不同,您无法在容器之间共享 tmpfs 挂载。
  • 此功能仅在您在 Linux 上运行 Docker 时可用。
  • 设置 tmpfs 的权限可能会导致它们在容器重启后重置。在某些情况下,设置 uid/gid 可以作为一种变通方法。

选择 --tmpfs 或 --mount 标志

一般来说,--mount 更明确且更详细。最大的区别是 --tmpfs 标志不支持任何可配置选项。

  • --tmpfs:挂载 tmpfs 挂载,不允许您指定任何可配置选项,并且只能与独立容器一起使用。

  • --mount:由多个键值对组成,用逗号分隔,每个键值对由一个 <key>=<value> 元组组成。--mount 语法比 --tmpfs 更详细。

    • 挂载的 type,可以是 bindvolumetmpfs。本主题讨论 tmpfs,因此类型始终为 tmpfs
    • destination 的值为在容器中挂载 tmpfs 挂载的路径。可以指定为 destinationdsttarget
    • tmpfs-sizetmpfs-mode 选项。请参阅 tmpfs 选项

下面的示例显示了 --mount--tmpfs 语法(如果可能),并且首先介绍 --mount

--tmpfs--mount 行为之间的区别

  • --tmpfs 标志不允许您指定任何可配置选项。
  • --tmpfs 标志不能与 Swarm 服务一起使用。必须使用 --mount

在容器中使用 tmpfs 挂载

要在容器中使用 tmpfs 挂载,请使用 --tmpfs 标志,或使用带有 type=tmpfsdestination 选项的 --mount 标志。tmpfs 挂载没有 source。以下示例在 Nginx 容器的 /app 中创建一个 tmpfs 挂载。第一个示例使用 --mount 标志,第二个示例使用 --tmpfs 标志。


$ docker run -d \
  -it \
  --name tmptest \
  --mount type=tmpfs,destination=/app \
  nginx:latest
$ docker run -d \
  -it \
  --name tmptest \
  --tmpfs /app \
  nginx:latest

通过查看 docker inspect 输出的 Mounts 部分来验证挂载是否是 tmpfs 挂载。

$ docker inspect tmptest --format '{{ json .Mounts }}'
[{"Type":"tmpfs","Source":"","Destination":"/app","Mode":"","RW":true,"Propagation":""}]

停止并删除容器

$ docker stop tmptest
$ docker rm tmptest

指定 tmpfs 选项

tmpfs 挂载允许使用两个配置选项,这两个选项都不是必需的。如果您需要指定这些选项,则必须使用 --mount 标志,因为 --tmpfs 标志不支持它们。

选项描述
tmpfs-size以字节为单位的 tmpfs 挂载大小。如果未设置,则 tmpfs 卷的默认最大大小为主机总 RAM 的 50%。
tmpfs-modetmpfs 的八进制文件模式。例如,7000770。默认为 1777 或世界可写。

以下示例将 tmpfs-mode 设置为 1770,以便它在容器内不可世界读取。

docker run -d \
  -it \
  --name tmptest \
  --mount type=tmpfs,destination=/app,tmpfs-mode=1770 \
  nginx:latest

后续步骤