Files
podman/docs/source/markdown/podman-volume-inspect.1.md
Matthew Heon 046c0e5fc2 Only stop chowning volumes once they're not empty
When an empty volume is mounted into a container, Docker will
chown that volume appropriately for use in the container. Podman
does this as well, but there are differences in the details. In
Podman, a chown is presently a one-and-done deal; in Docker, it
will continue so long as the volume remains empty. Mount into a
dozen containers, but never add content, the chown occurs every
time. The chown is also linked to copy-up; it will always occur
when a copy-up occurred, despite the volume now not being empty.
This PR changes our logic to (mostly) match Docker's.

For some reason, the chowning also stops if the volume is chowned
to root at any point. This feels like a Docker bug, but as they
say, bug for bug compatible.

In retrospect, using bools for NeedsChown and NeedsCopyUp was a
mistake. Docker isn't actually tracking this stuff; they're just
doing a copy-up and permissions change unconditionally as long as
the volume is empty. They also have the two linked as one
operation, seemingly, despite happening at very different times
during container init. Replicating that in our stateful system is
nontrivial, hence the need for the new CopiedUp field. Basically,
we never want to chown a volume with contents in it, except if
that data is a result of a copy-up that resulted from mounting
into the current container. Tracking who did the copy-up is the
easiest way to do this.

Fixes #22571

Signed-off-by: Matthew Heon <matthew.heon@pm.me>
2024-05-22 17:47:01 -04:00

3.9 KiB

% podman-volume-inspect 1

NAME

podman-volume-inspect - Get detailed information on one or more volumes

SYNOPSIS

podman volume inspect [options] volume [...]

DESCRIPTION

Display detailed information on one or more volumes. The output can be formatted using the --format flag and a Go template. To get detailed information about all the existing volumes, use the --all flag. Volumes can be queried individually by providing their full name or a unique partial name.

OPTIONS

--all, -a

Inspect all volumes.

--format, -f=format

Format volume output using Go template

Valid placeholders for the Go template are listed below:

Placeholder Description
.Anonymous Indicates whether volume is anonymous
.CreatedAt ... Volume creation time
.Driver Volume driver
.GID GID the volume was created with
.Labels ... Label information associated with the volume
.LockNumber Number of the volume's Libpod lock
.MountCount Number of times the volume is mounted
.Mountpoint Source of volume mount point
.Name Volume name
.NeedsChown Indicates volume will be chowned on next use
.NeedsCopyUp Indicates data at the destination will be copied into the volume on next use
.Options ... Volume options
.Scope Volume scope
.Status ... Status of the volume
.StorageID StorageID of the volume
.Timeout Timeout of the volume
.UID UID the volume was created with

--help

Print usage statement

EXAMPLES

Inspect named volume.

$ podman volume inspect myvol
[
     {
          "Name": "myvol",
          "Driver": "local",
          "Mountpoint": "/home/myusername/.local/share/containers/storage/volumes/myvol/_data",
          "CreatedAt": "2023-03-13T16:26:48.423069028-04:00",
          "Labels": {},
          "Scope": "local",
          "Options": {},
          "MountCount": 0,
          "NeedsCopyUp": true,
          "NeedsChown": true
     }
]

Inspect all volumes.

$ podman volume inspect --all
[
     {
          "Name": "myvol",
          "Driver": "local",
          "Mountpoint": "/home/myusername/.local/share/containers/storage/volumes/myvol/_data",
          "CreatedAt": "2023-03-13T16:26:48.423069028-04:00",
          "Labels": {},
          "Scope": "local",
          "Options": {},
          "MountCount": 0,
          "NeedsCopyUp": true,
          "NeedsChown": true
     }
]

Inspect named volume and display its Driver and Scope field.

$ podman volume inspect --format "{{.Driver}} {{.Scope}}" myvol
local local

SEE ALSO

podman(1), podman-volume(1), podman-inspect(1)

HISTORY

November 2018, Originally compiled by Urvashi Mohnani umohnani@redhat.com