docker / cli

The Docker CLI
Apache License 2.0
4.83k stars 1.9k forks source link

docker system prune --volumes removes more than volumes #5272

Open stavros-k opened 1 month ago

stavros-k commented 1 month ago

Description

Running docker system prune --volumes removes also networks and images.

Reproduce

  1. Run docker system prune --volumes
  2. See result of deleted networks and images

Expected behavior

docker system prune --volumes to remove only volumes

docker version

Client: Docker Engine - Community
 Version:           27.0.3
 API version:       1.46
 Go version:        go1.21.11
 Git commit:        7d4bcd8
 Built:             Sat Jun 29 00:02:23 2024
 OS/Arch:           linux/amd64
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          27.0.3
  API version:      1.46 (minimum version 1.24)
  Go version:       go1.21.11
  Git commit:       662f78c
  Built:            Sat Jun 29 00:02:23 2024
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.7.19
  GitCommit:        2bf793ef6dc9a18e00cb12efb64355c2c9d5eb41
 runc:
  Version:          1.7.19
  GitCommit:        v1.1.13-0-g58aa920
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

docker info

❯ docker info
Client: Docker Engine - Community
 Version:    27.0.3
 Context:    default
 Debug Mode: false
 Plugins:
  buildx: Docker Buildx (Docker Inc.)
    Version:  v0.15.1
    Path:     /usr/libexec/docker/cli-plugins/docker-buildx
  compose: Docker Compose (Docker Inc.)
    Version:  v2.28.1
    Path:     /usr/libexec/docker/cli-plugins/docker-compose

Server:
 Containers: 1
  Running: 1
  Paused: 0
  Stopped: 0
 Images: 62
 Server Version: 27.0.3
 Storage Driver: overlay2
  Backing Filesystem: extfs
  Supports d_type: true
  Using metacopy: false
  Native Overlay Diff: true
  userxattr: false
 Logging Driver: json-file
 Cgroup Driver: systemd
 Cgroup Version: 2
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local splunk syslog
 Swarm: inactive
 Runtimes: io.containerd.runc.v2 runc
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 2bf793ef6dc9a18e00cb12efb64355c2c9d5eb41
 runc version: v1.1.13-0-g58aa920
 init version: de40ad0
 Security Options:
  apparmor
  seccomp
   Profile: builtin
  cgroupns
 Kernel Version: 6.8.0-38-generic
 Operating System: Ubuntu 24.04 LTS
 OSType: linux
 Architecture: x86_64
 CPUs: 20
 Total Memory: 62.54GiB
 Name: skois-tuxedo-infinity-book-pro-gen8-mk1
 ID: 94c40e6d-b572-4a2f-a475-02a342b0cf77
 Docker Root Dir: /var/lib/docker
 Debug Mode: false
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Live Restore Enabled: false

Additional Info

❯ docker system prune --volumes
WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all anonymous volumes not used by at least one container
  - all dangling images
  - unused build cache

Are you sure you want to continue? [y/N] y
Deleted Networks:
8caff21ff04f28e755560477970075b7_default
f9be94402e59ef962fdde322e0e94f0c_default
29e9cd760014396211de8324e775d7bb_default
b655b06ebcfaeb560954ed06899eb1bf_default
14c34e35e19dd83aa1077259a1c1c46d_default
323e14b0d04bbbf5bfa8015d6e444e6e_default
b9412eeb2d979141074dc9177d938528_default
0664147dbf1220bbbc5d60b9f7985d75_default
339b39f85e2961cf31d1d457b29dd414_default
7e410146be4767c26735a0f09a1e071d_default
285969ed2330fceaf96c5f616cd78f2e_default
b4eb90af7497082c7ce56b072e34a3c8_default
835b656378aae447ccb9f2d4add0d831_default
9d8008d4465439b8a65f573985378932_default
2ef67ebea4d6d438d89b1b29b20163a4_default

Deleted Images:
deleted: sha256:7bf54eaf638f0e6f39ee4f131ccdb712943b26027ac8bf12e4116d8cb04ef780
deleted: sha256:9962810a3bd037598dd325dc501f5f7c7eccbc4eed7a563e2326a9476a9e67be
deleted: sha256:86802713e51740b4194a9461ec140f903cb9145541f073635fd7653dc774838d
deleted: sha256:15553b5efb08eefc2559f4be8e7ff335cfc5f753089fea798125463d7d3673b0
deleted: sha256:9656a2ff7c0ee43266f5c8bc559b626cbb55eff06c72d763fac70776102625cb
deleted: sha256:7dc77cb4b06d9309efb903f29edf48dd501c64f8752576c1a337b9e0e67635e6
deleted: sha256:709aad1d6077724c77e649c36f5b1cf195da9c1fac897d47fbe130ac841ca1ba
deleted: sha256:c4e00f7fc5fac03a089b2a35bb6c0a0731ce1facc489bbdce12bf97dea0b5300
deleted: sha256:82d0363588e67aa94840b4a379427642576523c0f52cf4150f297520866c4d98
deleted: sha256:1e38444538c5377a914505dabd70496baf35df3ea9a86fa4e7dab0d8fed7c03c
deleted: sha256:6bcfdb238ad436fafa3bee9c255739b9ee85d0fc04eb1fbfa0668d4d736f9d48
deleted: sha256:f5ce22d1501f61ae02f0f45c6d616a9eb52db7823813ed14d5cd55d1e4626eef
deleted: sha256:fed265adf6a1b1ca4fa9305e2302d18a3f9bbd939218991d5c49b75c288975f7
deleted: sha256:2cbb4bdde7c0d066c68b54095c9439c01ad4024f1b4bc8317432df2b0c7ebff2
deleted: sha256:911b96b0414f06865468540bb6053f6cde6f74e29de22e8acce9a349065241fb
deleted: sha256:999cc1e272b8e6b8db47d65a5b12d2aa1b97e2cb462d1a2273dbdd8301407397
deleted: sha256:ae32236da3caa41c1fa9ffc6b0cd4f215b89c2ab89699aab13ac6a989fd5356c
deleted: sha256:47a37d8fc71defff69b1418ac88c70812efd9e5f8e0e6bd4bd4b02c1a7cdce88

Total reclaimed space: 10.62GB
thaJeztah commented 1 month ago

This is the expected behavior; docker system prune is meant to remove all unused objects. The --volumes flag was added as a "safety" options, because volumes are normally used to store persistent data, which may be important data (e.g. data for a database); in some cases such volumes may not be currently used, but still important.

If you want to only prune volumes, use docker volumes prune instead.

From the documentation; https://docs.docker.com/reference/cli/docker/system/prune/#description

Screenshot 2024-07-22 at 14 18 06

The command description could probably use some improving though, because it only prints the short description (Remove unused data); maybe we can make the commands use the long description (if available);

docker system prune --help

Usage:  docker system prune [OPTIONS]

Remove unused data

Options:
  -a, --all             Remove all unused images not just dangling ones
      --filter filter   Provide filter values (e.g. "label=<key>=<value>")
  -f, --force           Do not prompt for confirmation
      --volumes         Prune anonymous volumes