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