podman-volume-create(1) General Commands Manual podman-volume-create(1)

# [NAME](#NAME)

podman-volume-create - Create a new volume

# [SYNOPSIS](#SYNOPSIS)

**podman volume create** \[*options*] \[*name*]

# [DESCRIPTION](#DESCRIPTION)

Creates an empty volume and prepares it to be used by containers. The volume can be created with a specific name, if a name is not given a random name is generated. You can add metadata to the volume by using the **--label** flag and driver options can be set using the **--opt** flag.

# [OPTIONS](#OPTIONS)

## **--driver**, **-d**=*driver*

Specify the volume driver name (default **local**). There are two drivers supported by Podman itself: **local** and **image**.

The **local** driver uses a directory on disk as the backend by default, but can also use the [**mount(8)**](/man/enterprise-packages/podman-doc-6.1/mount.8) command to mount a filesystem as the volume if **--opt** is specified.

The **image** driver uses an image as the backing store of 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 **local** or **image**, Podman attempts to create the volume using a volume plugin with the given name. Such plugins must be defined in the **volume\_plugins** section of the [**containers.conf(5)**](/man/enterprise-packages/podman-doc-6.1/containers.conf.5) configuration file.

## **--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 in **podman volume inspect** or **podman 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 **local** driver the following options are supported: **type**, **device**, **o**, and **\[no]copy**.

- The **type** option sets the type of the filesystem to be mounted, and is equivalent to the **-t** flag to [**mount(8)**](/man/enterprise-packages/podman-doc-6.1/mount.8).
- The **device** option sets the device to be mounted, and is equivalent to the **device** argument to [**mount(8)**](/man/enterprise-packages/podman-doc-6.1/mount.8).
- The **copy** option enables copying files from the container image path where the mount is created to the newly created volume on the first run. **copy** is the default.

The **o** option sets options for the mount, and is equivalent to the filesystem options (also **-o**) passed to [**mount(8)**](/man/enterprise-packages/podman-doc-6.1/mount.8) with the following exceptions:

- The **o** option supports **uid** and **gid** options to set the UID and GID of the created volume that are not normally supported by [**mount(8)**](/man/enterprise-packages/podman-doc-6.1/mount.8).
- The **o** option supports the **size** option to set the maximum size of the created volume, the **inodes** option to set the maximum number of inodes for the volume, and **noquota** to completely disable quota support even for tracking of disk usage. The **size** option is supported on the "tmpfs" and "xfs\[note]" file systems. The **inodes** option is supported on the "xfs\[note]" file systems. Note: xfs filesystems must be mounted with the **prjquota** flag described in the [**xfs\_quota(8)**](/man/enterprise-packages/podman-doc-6.1/xfs_quota.8) man page. Podman will throw an error if they're not.
- The **o** option supports using volume options other than the UID/GID options with the **local** driver and requires root privileges.
- The **o** options supports the **timeout** option which allows users to set a driver specific timeout in seconds before volume creation fails. For example, **--opt=o=timeout=10** sets a driver timeout of 10 seconds.

**Note Do not confuse the --opt,-o** create option with the **-o** mount option. For example, with **podman volume create**, use **-o=o=uid=1000** *not* **-o=uid=1000**.

For the **image** driver, the only supported option is **image**, which specifies the image the volume is based on. This option is mandatory when using the **image** driver.

When not using the **local** and **image** drivers, the given options are passed directly to the volume plugin. In this case, supported options are dictated by the plugin in question, not Podman.

## **--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](#QUOTAS)

**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.

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.

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. &gt;= 100000). All volume assigned project IDs larger project IDs starting with 200000. This prevents xfs\_quota management conflicts with containers/storage.

# [EXAMPLES](#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 testvol with 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](#MOUNT_EXAMPLES)

**podman volume create** allows the **type**, **device**, and **o** options to be passed to [**mount(8)**](/man/enterprise-packages/podman-doc-6.1/mount.8) when using the **local** driver.

# [s3fs-fuse](#s3fs-fuse)

s3fs-fuse or just **s3fs**, is a fuse filesystem that allows s3 prefixes to be mounted as filesystem mounts.

**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)](/man/enterprise-packages/podman-doc-6.1/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.

## [Using with other container users](#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. &gt; 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](#The_Prefix_must_exist)

**s3fs** will fail to mount if the prefix does not exist in the bucket.

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.

FUSE filesystems exist for Google Cloud Storage and Azure Blob Storage

# [SEE ALSO](#SEE_ALSO)

[**podman(1)**](/man/enterprise-packages/podman-doc-6.1/podman.1), [**containers.conf(5)**](/man/enterprise-packages/podman-doc-6.1/containers.conf.5), [**podman-volume(1)**](/man/enterprise-packages/podman-doc-6.1/podman-volume.1), [**mount(8)**](/man/enterprise-packages/podman-doc-6.1/mount.8), [**xfs\_quota(8)**](/man/enterprise-packages/podman-doc-6.1/xfs_quota.8), [**xfs\_quota(8)**](/man/enterprise-packages/podman-doc-6.1/xfs_quota.8), [**projects(5)**](/man/enterprise-packages/podman-doc-6.1/projects.5), [**projid(5)**](/man/enterprise-packages/podman-doc-6.1/projid.5)

# [HISTORY](#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⟩

---

Document: podman-volume-create(1) from podman-doc-6.1 6.1.4-r7 (Chainguard OS)
Source: https://github.com/containers/podman
