TMPFS 安装座

绑定挂载允许您共享文件 在主机和容器之间,这样即使在 容器已停止。

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

与 volumes 和 bind 挂载相反,tmpfs 挂载是临时的,并且只是 保留在主机内存中。当容器停止时,tmpfs 挂载为 removed 和写入其中的文件将不会被保留。

tmpfs 挂载最适合用于不希望数据持久化的情况 在主机上或容器中。这可能是为了安全 原因或为了保护容器的性能,当您的应用程序 需要写入大量非持久化 state 数据。

重要

Docker 中的 tmpfs 挂载直接映射到 Linux 内核中的 tmpfs。因此, 临时数据可以写入交换文件,从而持久化到 文件系统。

挂载到现有数据上

如果您将 tmpfs 挂载到容器中的文件或 目录存在,预先存在的文件会被挂载遮挡。这是 类似于要将文件保存到 Linux 主机上,然后 已将 USB 驱动器安装到 中。的内容会被 USB 驱动器的内容,直到 USB 驱动器被卸载。/mnt/mnt/mnt

对于容器,没有直接的方法可以移除挂载来显示 再次被遮挡的文件。最好的选择是在 坐骑。

tmpfs 挂载的限制

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

语法

要使用该命令挂载 tmpfs,可以使用 or 标志。docker run--mount--tmpfs

$ docker run --mount type=tmpfs,dst=<mount-path>
$ docker run --tmpfs <mount-path>

一般来说,是首选。主要区别在于该标志更明确并支持所有可用选项。--mount--mount

该标志不能与 swarm 服务一起使用。您必须使用 .--tmpfs--mount

--mount 的选项

该标志由多个键值对组成,用逗号分隔 每个 Tuples 都由一个 Tuples 组成。键的顺序不是 重要。--mount<key>=<value>

$ docker run --mount type=tmpfs,dst=<mount-path>[,<key>=<value>...]

的有效选项包括:--mount type=tmpfs

选择描述
destination, ,dsttargettmpfs 挂载的大小(以字节为单位)。如果未设置,则 tmpfs 卷的默认最大大小为主机总 RAM 的 50%。
tmpfs-sizetmpfs 挂载的大小(以字节为单位)。如果未设置,则 tmpfs 卷的默认最大大小为主机总 RAM 的 50%。
tmpfs-modetmpfs 的文件模式(以八进制为单位)。例如,或 .默认为 或 world-writable。70007701777
$ docker run --mount type=tmpfs,dst=/app,tmpfs-size=21474836480,tmpfs-mode=1770

--tmpfs 的选项

该标志不允许您指定任何选项。--tmpfs

在容器中使用 tmpfs 挂载

要在容器中使用挂载,请使用 flag,或者将 flag 与 和 options 一起使用。没有 for mounts。以下示例在 Nginx 容器中创建一个挂载点。第一个示例使用 flag 和 second 使用标志。tmpfs--tmpfs--mounttype=tmpfsdestinationsourcetmpfstmpfs/app--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

通过查看 输出:tmpfsMountsdocker inspect

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

停止并移除容器:

$ docker stop tmptest
$ docker rm tmptest

后续步骤