Description
Post-moby/moby#44216, anonymous volumes are annotated with the label com.docker.volume.anonymous, e.g.:
[
{
"CreatedAt": "2023-07-20T04:52:35Z",
"Driver": "local",
"Labels": {
"com.docker.volume.anonymous": ""
},
"Mountpoint": "/var/lib/docker/volumes/2ec6337464768820a3076200c69c80e4d6d7dc363cfcde6821dc3430ba709450/_data",
"Name": "2ec6337464768820a3076200c69c80e4d6d7dc363cfcde6821dc3430ba709450",
"Options": null,
"Scope": "local"
}
]
This facilitates the new behavior of not pruning named but unused volumes by default. It appears that anonymous volumes defined at the Compose-file level do not result in an annotated anonymous volume, and thus fail to docker volume prune unless the -a (include named volumes) flag is added.
Steps To Reproduce
services:
hw:
image: hello-world
volumes:
- /foo/bar
docker inspect the container, and then the anonymous volume at /foo/bar. It will be missing the annotation:
[
{
"CreatedAt": "2023-07-20T07:48:38+03:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/fd9b04deff814f6def0a8108c42c02aac65e1f7ea6ee0a5193203197ae0d2eea/_data",
"Name": "fd9b04deff814f6def0a8108c42c02aac65e1f7ea6ee0a5193203197ae0d2eea",
"Options": null,
"Scope": "local"
}
]
Compose Version
Docker Compose version v2.20.0
Docker Environment
Client:
Version: 24.0.4
Context: desktop-linux
Debug Mode: false
Plugins:
buildx: Docker Buildx (Docker Inc.)
Version: v0.11.1
Path: /Users/neersighted/.docker/cli-plugins/docker-buildx
compose: Docker Compose (Docker Inc.)
Version: v2.20.0
Path: /Users/neersighted/.docker/cli-plugins/docker-compose
dev: Docker Dev Environments (Docker Inc.)
Version: v0.1.0
Path: /Users/neersighted/.docker/cli-plugins/docker-dev
extension: Manages Docker extensions (Docker Inc.)
Version: v0.2.20
Path: /Users/neersighted/.docker/cli-plugins/docker-extension
init: Creates Docker-related starter files for your project (Docker Inc.)
Version: v0.1.0-beta.6
Path: /Users/neersighted/.docker/cli-plugins/docker-init
sbom: View the packaged-based Software Bill Of Materials (SBOM) for an image (Anchore Inc.)
Version: 0.6.0
Path: /Users/neersighted/.docker/cli-plugins/docker-sbom
scan: Docker Scan (Docker Inc.)
Version: v0.26.0
Path: /Users/neersighted/.docker/cli-plugins/docker-scan
scout: Command line tool for Docker Scout (Docker Inc.)
Version: 0.16.1
Path: /Users/neersighted/.docker/cli-plugins/docker-scout
Server:
Containers: 4
Running: 3
Paused: 0
Stopped: 1
Images: 10
Server Version: 24.0.4-3-gecd494abf3
Storage Driver: stargz
driver-type: io.containerd.snapshotter.v1
Logging Driver: json-file
Cgroup Driver: cgroupfs
Cgroup Version: 2
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: io.containerd.runc.v2 runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 3dce8eb055cbb6872793272b4f20ed16117344f8
runc version: v1.1.7-0-g860f061
init version: de40ad0
Security Options:
seccomp
Profile: builtin
cgroupns
Kernel Version: 5.15.49-linuxkit-pr
Operating System: Docker Desktop
OSType: linux
Architecture: aarch64
CPUs: 12
Total Memory: 11.68GiB
Name: docker-desktop
ID: 24db6515-ca45-4274-8dba-a59d6fb3a368
Docker Root Dir: /var/lib/docker
Debug Mode: false
HTTP Proxy: http.docker.internal:3128
HTTPS Proxy: http.docker.internal:3128
No Proxy: hubproxy.docker.internal
Experimental: false
Insecure Registries:
hubproxy.docker.internal:5555
127.0.0.0/8
Live Restore Enabled: false
Anything else?
This looks possibly similar to moby/moby#45147 (cc @cpuguy83); without knowing how the implementation works however, I can only guess that one of the following is true:
- Compose "fakes" anonymous volumes by generating a random name for them, so the engine does not set the annotation.
- Compose does not pass a name so the engine is generating one, but somehow there is an edge case between the API and volume creation and the annotation is not being applied.
Originally reported by/credit to @FlowSwift.
Description
Post-moby/moby#44216, anonymous volumes are annotated with the label
com.docker.volume.anonymous, e.g.:[ { "CreatedAt": "2023-07-20T04:52:35Z", "Driver": "local", "Labels": { "com.docker.volume.anonymous": "" }, "Mountpoint": "/var/lib/docker/volumes/2ec6337464768820a3076200c69c80e4d6d7dc363cfcde6821dc3430ba709450/_data", "Name": "2ec6337464768820a3076200c69c80e4d6d7dc363cfcde6821dc3430ba709450", "Options": null, "Scope": "local" } ]This facilitates the new behavior of not pruning named but unused volumes by default. It appears that anonymous volumes defined at the Compose-file level do not result in an annotated anonymous volume, and thus fail to
docker volume pruneunless the-a(include named volumes) flag is added.Steps To Reproduce
docker inspectthe container, and then the anonymous volume at/foo/bar. It will be missing the annotation:[ { "CreatedAt": "2023-07-20T07:48:38+03:00", "Driver": "local", "Labels": null, "Mountpoint": "/var/lib/docker/volumes/fd9b04deff814f6def0a8108c42c02aac65e1f7ea6ee0a5193203197ae0d2eea/_data", "Name": "fd9b04deff814f6def0a8108c42c02aac65e1f7ea6ee0a5193203197ae0d2eea", "Options": null, "Scope": "local" } ]Compose Version
Docker Environment
Anything else?
This looks possibly similar to moby/moby#45147 (cc @cpuguy83); without knowing how the implementation works however, I can only guess that one of the following is true:
Originally reported by/credit to @FlowSwift.