名称

podman-volume-create - 创建一个新的卷

概要

podman volume create [选项] [名称]

描述

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

选项

--driver, -d=driver

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

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

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

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

--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。

示例

创建空卷。

$ 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

创建名为 testvol 的 tmpfs 卷,并指定选项。

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

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

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

配额

podman volume create使用XFS project quota controls来控制内置卷的大小和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>

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

挂载示例

podman volume create允许将typedeviceo选项传递给mount(8),前提是使用local驱动程序。

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

请查看他们在 wiki 上提供的可用选项

与其他容器用户一起使用

上面的示例之所以有效,是因为卷以主机用户的身份进行挂载,并且在容器中,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 编写。