podman-volume-create(1)
β¨ podman-volume-create(1) β¨
hey bestie! π welcome to the manual page for podman volume create β it's from the General Commands Manual and it's literally your new fave command for making volumes. no cap. π
π NAME π
podman-volume-create β Create a new volume. (bestie, it's literally in the name, no cap π
)
β¨ SYNOPSIS β¨
podman volume create [options] [name]
π¦ DESCRIPTION π¦
okay so this command creates an empty volume and gets it all prepped and ready to be used by containers. you can give the volume a specific name if you want β but if you don't give a name, a random one is generated for you (surprise! π). you can also add metadata to the volume using the --label flag, and driver options can be set using the --opt flag. it's giving customization queen. π
π OPTIONS π
--driver,-d=driver β Specify the volume driver name (defaultlocal). There are two drivers supported by Podman itself:localandimage.- The
localdriver uses a directory on disk as the backend by default, but can also use themount(8)command to mount a filesystem as the volume if--optis specified. - The
imagedriver uses an image as the backing store for the volume. An overlay filesystem is created, which allows changes to the volume to be committed as a new layer on top of the image. - Using a value other than
localorimage, Podman attempts to create the volume using a volume plugin with the given name. Such plugins must be defined in thevolume_pluginssection of thecontainers.conf(5)configuration file.
- The
--gid=gid β Set the GID that the volume will be created as. Differently than--opt o=gid=*gid*, the specified value is not passed to the mount operation. The specified GID will own the volume's mount point directory and affects the volume chown operation.--helpβ Print usage statement.--ignoreβ Don't fail if the named volume already exists, instead just print the name. Note that the new options are not applied to the existing volume.--label,-l=label β Set metadata for the volume (e.g.,--label mykey=value). Can be used multiple times. These labels can be viewed inpodman volume inspectorpodman volume ls.--opt,-o=option β Set driver specific options. For the default driver,local, this allows a volume to be configured to mount a filesystem on the host.- For the
localdriver the following options are supported:type,device,o, and[no]copy.- The
typeoption sets the type of the filesystem to be mounted, and is equivalent to the-tflag tomount(8). - The
deviceoption sets the device to be mounted, and is equivalent to thedeviceargument tomount(8). - The
copyoption enables copying files from the container image path where the mount is created to the newly created volume on the first run.copyis the default.
- The
- The
ooption sets options for the mount, and is equivalent to the filesystem options (also-o) passed tomount(8)with the following exceptions:- The
ooption supportsuidandgidoptions to set the UID and GID of the created volume that are not normally supported bymount(8). - The
ooption supports thesizeoption to set the maximum size of the created volume, theinodesoption to set the maximum number of inodes for the volume, andnoquotato completely disable quota support even for tracking of disk usage. Thesizeoption is supported on the"tmpfs"and"xfs[note]"file systems. Theinodesoption is supported on the"xfs[note]"file systems. Note: xfs filesystems must be mounted with theprjquotaflag described in thexfs_quota(8)man page. Podman will throw an error if they're not. - The
ooption supports using volume options other than the UID/GID options with thelocaldriver and requires root privileges. - The
ooptions supports thetimeoutoption which allows users to set a driver specific timeout in seconds before volume creation fails. For example,--opt=o=timeout=10sets a driver timeout of 10 seconds.
- The
- Note Do not confuse the
--opt,-ocreate option with the-omount option. For example, withpodman volume create, use-o=o=uid=1000not-o=uid=1000. - For the
imagedriver, the only supported option isimage, which specifies the image the volume is based on. This option is mandatory when using theimagedriver. - When not using the
localandimagedrivers, the given options are passed directly to the volume plugin. In this case, supported options are dictated by the plugin in question, not Podman.
- For the
--uid=uid β Set the UID that the volume will be created as. Differently than--opt o=uid=*uid*, the specified value is not passed to the mount operation. The specified UID will own the volume's mount point directory and affects the volume chown operation.
π QUOTAS π
okay so podman volume create uses XFS project quota controls for controlling the size and the number of inodes of builtin volumes. The directory used to store the volumes must be an XFS file system and be mounted with the pquota option. no cap.
Example /etc/fstab entry:
/dev/podman/podman-var /var xfs defaults,x-systemd.device-timeout=0,pquota 1 2
Podman generates project IDs for each builtin volume, but these project IDs need to be unique for the XFS file system. These project IDs by default are generated randomly, with a potential for overlap with other quotas on the same file system. (lowkey risky, bestie π)
The xfs_quota tool can be used to assign a project ID to the storage driver directory, e.g.:
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>
In the example above we are configuring the overlay storage driver for newly created containers as well as volumes to use project IDs with a start offset. All containers are assigned larger project IDs (e.g. >= 100000). All volume assigned project IDs larger project IDs starting with 200000. This prevents xfs_quota management conflicts with containers/storage.
π EXAMPLES π
- Create empty volume.
$ podman volume create
- Create empty named volume.
$ podman volume create myvol
- Create empty named volume with specified label.
$ podman volume create --label foo=bar myvol
- Create tmpfs named volume with specified size and mount options.
# podman volume create --opt device=tmpfs --opt type=tmpfs --opt o=size=2M,nodev,noexec myvol
- Create tmpfs named volume
testvolwith specified options.
# podman volume create --opt device=tmpfs --opt type=tmpfs --opt o=uid=1000,gid=1000 testvol
- Create volume overriding the owner UID and GID.
# podman volume create --uid 1000 --gid 1000 myvol
- Create image named volume using the specified local image in
containers/storage.
# podman volume create --driver image --opt image=fedora:latest fedoraVol
π§ MOUNT EXAMPLES π§
podman volume create allows the type, device, and o options to be passed to mount(8) when using the local driver. (iykyk π
)
π s3fs-fuse π
s3fs-fuse or just s3fs, is a fuse filesystem that allows s3 prefixes to be mounted as filesystem mounts. it's giving cloud storage realness. βοΈ
Installing:
$ doas dnf install s3fs-fuse
Simple usage:
$ s3fs --help
$ s3fs -o use_xattr,endpoint=aq-central-1 bucket:/prefix /mnt
Equivalent through mount(8):
$ mount -t fuse.s3fs -o use_xattr,endpoint=aq-central-1 bucket:/prefix /mnt
Equivalent through 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
The volume can then be mounted in a container with
$ podman run -v s3fs-fuse-volume:/s3:z --rm -it fedora:latest
Please see the available options on their wiki. (iykyk, bestie π«Ά)
π¦ Using with other container users π¦
The above example works because the volume is mounted as the host user and inside the container root is mapped to the user in the host.
If the mount is accessed by a different user inside the container, a "Permission denied" error will be raised.
$ podman run --user bin:bin -v s3fs-fuse-volume:/s3:z,U --rm -it fedora:latest
$ ls /s3
# ls: /s3: Permission denied
In FUSE-land, mounts are protected for the user who mounted them; specify the allow_other mount option if other users need access.
Note: This will remove the normal fuse security measures on the mount point, after which, the normal filesystem permissions will have to protect it
$ 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
πΈ The Prefix must exist πΈ
s3fs will fail to mount if the prefix does not exist in the bucket. (not me finding out the hard way π)
Create a s3-directory by putting an empty object at the desired prefix/key
$ aws s3api put-object --bucket bucket --key prefix/
If performance is the priority, please check out the more performant goofys.
btw, FUSE filesystems exist for Google Cloud Storage and Azure Blob Storage too! π
π SEE ALSO π
podman(1)containers.conf(5)podman-volume(1)mount(8)xfs_quota(8)xfs_quota(8)projects(5)projid(5)
π HISTORY π
January 2020, updated with information on volume plugins by Matthew Heon mheon@redhat.com β¨mailto:mheon@redhat.comβ© November 2018, Originally compiled by Urvashi Mohnani umohnani@redhat.com β¨mailto:umohnani@redhat.comβ©
okay bestie, that's the whole page! π this is from the General Commands Manual, version podman-volume-create(1), and the history dates back to November 2018 and January 2020. now go create some volumes and slay! π
β¨
π¦ where this page comes from
- arch rolling: podman 6.1.4-1 Β· Apache-2.0
- centos-stream 10: podman 7:6.1.0-2.el10 Β· Apache-2.0 AND BSD-2-Clause AND BSD-3-Clause AND ISC AND MIT AND MPL-2.0
- nixpkgs unstable: podman 6.1.4
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms