名称¶
podman-volume-create - 创建一个新的卷
概要¶
podman volume create [选项] [名称]
描述¶
创建一个空卷并准备它供容器使用。卷可以使用特定名称创建,如果没有指定名称,则会生成一个随机名称。您可以使用--label标志添加卷的元数据,并且可以使用--opt标志设置驱动程序选项。
选项¶
--driver, -d=driver¶
指定卷驱动程序名称(默认值是local)。Podman 本身支持两个驱动程序:local 和 image。
local驱动程序默认使用磁盘上的目录作为后端,但是如果指定了--opt,它也可以使用mount(8)命令来挂载文件系统作为卷。
image 驱动程序使用镜像作为卷的后备存储。将创建覆盖文件系统,允许将卷的更改作为新层提交到镜像之上。
使用除local或image以外的值时,Podman 会尝试使用具有给定名称的卷插件创建卷。此类插件必须在containers.conf(5)配置文件的volume_plugins部分中定义。
--help¶
打印使用说明
--ignore¶
如果名为卷已经存在,则不要失败,而是只打印名称。请注意,新选项不会应用于现有卷。
--label, -l=label¶
设置卷的元数据(例如,--label mykey=value)。
--opt, -o=option¶
设置驱动程序特定选项。对于默认驱动程序local,这允许配置卷以挂载主机上的文件系统。
对于local
驱动程序,支持以下选项:type
、device
、o
和[no]copy
。
该
type
选项设置要挂载的文件系统的类型,它等同于mount(8)的-t
标志。该
device
选项设置要挂载的设备,它等同于mount(8)的device
参数。该
copy
选项在第一次运行时启用将文件从容器镜像路径(在其中创建挂载点)复制到新创建的卷。copy
是默认值。
该o
选项设置挂载的选项,它等同于传递给mount(8)的文件系统选项(也是-o
),但以下情况除外
该
o
选项支持uid
和gid
选项来设置创建的卷的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驱动程序时,此选项是必需的。
当不使用local和image驱动程序时,给定的选项会直接传递给卷插件。在这种情况下,支持的选项由相关插件决定,而不是 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
允许将type
、device
和o
选项传递给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 Storage 和 Azure 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 编写。