名称

podman-volume-create - 创建新卷

简介

podman volume create [options] [name]

描述

创建一个空卷并准备好供容器使用。卷可以指定名称创建,如果未指定名称,则生成一个随机名称。您可以使用 --label 标志向卷添加元数据,并可以使用 --opt 标志设置驱动程序选项。

选项

--driver, -d=driver

指定卷驱动程序名称(默认为 local)。Podman 本身支持两种驱动程序:localimage

默认情况下,local 驱动程序使用磁盘上的目录作为后端,但如果指定了 --opt,它也可以使用 mount(8) 命令将文件系统挂载为卷。

image 驱动程序使用镜像作为卷的后备存储。将创建一个 overlay 文件系统,允许将对卷的更改作为新层提交到镜像之上。

使用除 localimage 之外的值时,Podman 会尝试使用具有给定名称的卷插件创建卷。此类插件必须在 containers.conf(5) 配置文件的 volume_plugins 部分中定义。

--gid=gid

设置将创建卷的 GID。与 --opt o=gid=*gid* 不同,指定的值不传递给挂载操作。指定的 GID 将拥有卷的挂载点目录并影响卷 chown 操作。

--help

打印用法说明

--ignore

如果命名卷已存在,则不失败,而是只打印名称。请注意,新选项不适用于现有卷。

--label, -l=label

为卷设置元数据(例如,--label mykey=value)。

--opt, -o=option

设置驱动程序特定选项。对于默认驱动程序 local,这允许将卷配置为在主机上挂载文件系统。

对于 local 驱动程序,支持以下选项:typedeviceo[no]copy

  • type 选项设置要挂载的文件系统类型,相当于 mount(8)-t 标志。

  • device 选项设置要挂载的设备,相当于 mount(8)device 参数。

  • copy 选项允许在首次运行时将文件从创建挂载的容器镜像路径复制到新创建的卷。 copy 是默认值。

o 选项设置挂载选项,相当于传递给 mount(8) 的文件系统选项(也是 -o),但有以下例外:

  • o 选项支持 uidgid 选项,用于设置创建卷的 UID 和 GID,这些选项通常不被 mount(8) 支持。

  • o 选项支持 size 选项以设置创建卷的最大大小,inodes 选项以设置卷的最大 inode 数,以及 noquota 以完全禁用配额支持,即使是磁盘使用情况跟踪。 size 选项在“tmpfs”和“xfs[note]”文件系统上受支持。 inodes 选项在“xfs[note]”文件系统上受支持。 注意:xfs 文件系统必须使用 xfs_quota(8) 手册页中描述的 prjquota 标志挂载。如果不是,Podman 将抛出错误。

  • o 选项支持将除 UID/GID 选项之外的卷选项与 local 驱动程序一起使用,并且需要 root 权限。

  • o 选项支持 timeout 选项,允许用户在卷创建失败之前设置一个驱动程序特定的超时(以秒为单位)。例如,--opt=o=timeout=10 将驱动程序超时设置为 10 秒。

注意 不要将 --opt,-o 创建选项与 -o 挂载选项混淆。例如,对于 podman volume create,请使用 -o=o=uid=1000 而不是 -o=uid=1000

对于 image 驱动程序,唯一支持的选项是 image,它指定卷所基于的镜像。使用 image 驱动程序时,此选项是强制性的。

当不使用 localimage 驱动程序时,给定的选项将直接传递给卷插件。在这种情况下,支持的选项由相关插件决定,而不是 Podman。

--uid=uid

设置将创建卷的 UID。与 --opt o=uid=*uid* 不同,指定的值不传递给挂载操作。指定的 UID 将拥有卷的挂载点目录并影响卷 chown 操作。

配额

podman volume create 使用 XFS 项目 配额 控制 来控制内置卷的大小和 inode 数量。用于存储卷的目录必须是 XFS 文件系统,并且必须使用 pquota 选项挂载。

示例 /etc/fstab 条目

/dev/podman/podman-var /var xfs defaults,x-systemd.device-timeout=0,pquota 1 2

Podman 为每个内置卷生成项目 ID,但这些项目 ID 对于 XFS 文件系统必须是唯一的。默认情况下,这些项目 ID 是随机生成的,可能与同一文件系统上的其他配额重叠。

xfs_quota 工具可用于为存储驱动程序目录分配项目 ID,例如:

echo 100000:/var/lib/containers/storage/overlay >> /etc/projects
echo 200000:/var/lib/containers/storage/volumes >> /etc/projects
echo storage:100000 >> /etc/projid
echo volumes:200000 >> /etc/projid
xfs_quota -x -c 'project -s storage volumes' /<xfs mount point>

在上面的示例中,我们配置 overlay 存储驱动程序,以便新创建的容器和卷都使用具有起始偏移量的项目 ID。所有容器都分配了较大的项目 ID(例如 >= 100000)。所有卷都分配了从 200000 开始的较大的项目 ID。这可以防止 xfs_quota 管理与容器/存储发生冲突。

示例

创建空卷。

$ podman volume create

创建空命名卷。

$ podman volume create myvol

使用指定标签创建空命名卷。

$ podman volume create --label foo=bar myvol

使用指定大小和挂载选项创建 tmpfs 命名卷。

# podman volume create --opt device=tmpfs --opt type=tmpfs --opt o=size=2M,nodev,noexec myvol

使用指定选项创建 tmpfs 命名卷 testvol。

# podman volume create --opt device=tmpfs --opt type=tmpfs --opt o=uid=1000,gid=1000 testvol

创建卷时覆盖所有者 UID 和 GID。

# podman volume create --uid 1000 --gid 1000 myvol

使用容器/存储中指定的本地镜像创建镜像命名卷。

# podman volume create --driver image --opt image=fedora:latest fedoraVol

挂载示例

podman volume create 允许在使用 local 驱动程序时将 typedeviceo 选项传递给 mount(8)

s3fs-fuse

s3fs-fuse 或简称 s3fs,是一个 fuse 文件系统,允许将 s3 前缀挂载为文件系统挂载。

安装

$ doas dnf install s3fs-fuse

简单用法

$ s3fs --help
$ s3fs -o use_xattr,endpoint=aq-central-1 bucket:/prefix /mnt

通过 mount(8) 等效

$ mount -t fuse.s3fs -o use_xattr,endpoint=aq-central-1 bucket:/prefix /mnt

通过 podman volume create 等效

$ podman volume create s3fs-fuse-volume -o type=fuse.s3fs -o device=bucket:/prefix -o o=use_xattr,endpoint=aq-central-1

然后可以在容器中挂载卷

$ podman run -v s3fs-fuse-volume:/s3:z --rm -it fedora:latest

请参阅其维基上可用的选项

与其他容器用户一起使用

上面的示例之所以有效,是因为卷是作为主机用户挂载的,并且在容器内部,root 映射到主机中的用户。

如果容器内的不同用户访问挂载,将引发“权限被拒绝”错误。

$ podman run --user bin:bin -v s3fs-fuse-volume:/s3:z,U --rm -it fedora:latest
$ ls /s3
# ls: /s3: Permission denied

在 FUSE 领域,挂载受挂载它们的用户保护;如果其他用户需要访问,请指定 allow_other 挂载选项。

注意:这将移除挂载点上的正常 fuse 安全措施,之后,正常的 文件系统权限将必须保护它。

$ podman volume create s3fs-fuse-other-volume -o type=fuse.s3fs -o device=bucket:/prefix -o o=allow_other,use_xattr,endpoint=aq-central-1
$ podman run --user bin:bin -v s3fs-fuse-volume:/s3:z,U --rm -it fedora:latest
$ ls /s3

前缀必须存在

如果前缀在存储桶中不存在,s3fs 将无法挂载。

通过在所需 prefix/ 键处放置一个空对象来创建 s3 目录

$ aws s3api put-object --bucket bucket --key prefix/

如果性能是优先考虑的,请查看性能更好的 goofys

FUSE 文件系统存在于 Google Cloud StorageAzure Blob Storage

另请参阅

podman(1), containers.conf(5), podman-volume(1), mount(8), xfs_quota(8), xfs_quota(8), projects(5), projid(5)

历史

2020 年 1 月,Matthew Heon mheon@redhat.com 更新了卷插件信息。2018 年 11 月,由 Urvashi Mohnani umohnani@redhat.com 最初编译。