docker system pruneEstimated reading time: 4 minutes
Remove unused data
docker system prune [OPTIONS]
||Remove all unused images not just dangling ones|
Provide filter values (e.g. ‘label=
||Do not prompt for confirmation|
|docker system||Manage Docker|
|docker system df||Show docker disk usage|
|docker system events||Get real time events from the server|
|docker system info||Display system-wide information|
|docker system prune||Remove unused data|
Remove all unused containers, networks, images (both dangling and unreferenced), and optionally, volumes.
$ docker system prune WARNING! This will remove: - all stopped containers - all networks not used by at least one container - all dangling images - all build cache Are you sure you want to continue? [y/N] y Deleted Containers: f44f9b81948b3919590d5f79a680d8378f1139b41952e219830a33027c80c867 792776e68ac9d75bce4092bc1b5cc17b779bc926ab04f4185aec9bf1c0d4641f Deleted Networks: network1 network2 Deleted Images: untagged: hello-world@sha256:f3b3b28a45160805bb16542c9531888519430e9e6d6ffc09d72261b0d26ff74f deleted: sha256:1815c82652c03bfd8644afda26fb184f2ed891d921b20a0703b46768f9755c57 deleted: sha256:45761469c965421a92a69cc50e92c01e0cfa94fe026cdd1233445ea00e96289a Total reclaimed space: 1.84kB
By default, volumes are not removed to prevent important data from being
deleted if there is currently no container using the volume. Use the
flag when running the command to prune volumes as well:
$ docker system prune -a --volumes WARNING! This will remove: - all stopped containers - all networks not used by at least one container - all volumes not used by at least one container - all images without at least one container associated to them - all build cache Are you sure you want to continue? [y/N] y Deleted Containers: 0998aa37185a1a7036b0e12cf1ac1b6442dcfa30a5c9650a42ed5010046f195b 73958bfb884fa81fa4cc6baf61055667e940ea2357b4036acbbe25a60f442a4d Deleted Networks: my-network-a my-network-b Deleted Volumes: named-vol Deleted Images: untagged: my-curl:latest deleted: sha256:7d88582121f2a29031d92017754d62a0d1a215c97e8f0106c586546e7404447d deleted: sha256:dd14a93d83593d4024152f85d7c63f76aaa4e73e228377ba1d130ef5149f4d8b untagged: alpine:3.3 deleted: sha256:695f3d04125db3266d4ab7bbb3c6b23aa4293923e762aa2562c54f49a28f009f untagged: alpine:latest deleted: sha256:ee4603260daafe1a8c2f3b78fd760922918ab2441cbb2853ed5c439e59c52f96 deleted: sha256:9007f5987db353ec398a223bc5a135c5a9601798ba20a1abba537ea2f8ac765f deleted: sha256:71fa90c8f04769c9721459d5aa0936db640b92c8c91c9b589b54abd412d120ab deleted: sha256:bb1c3357b3c30ece26e6604aea7d2ec0ace4166ff34c3616701279c22444c0f3 untagged: my-jq:latest deleted: sha256:6e66d724542af9bc4c4abf4a909791d7260b6d0110d8e220708b09e4ee1322e1 deleted: sha256:07b3fa89d4b17009eb3988dfc592c7d30ab3ba52d2007832dffcf6d40e3eda7f deleted: sha256:3a88a5c81eb5c283e72db2dbc6d65cbfd8e80b6c89bb6e714cfaaa0eed99c548 Total reclaimed space: 13.5 MB
--volumesoption was added in Docker 17.06.1. Older versions of Docker prune volumes by default, along with other Docker objects. On older versions, run
docker container prune,
docker network prune, and
docker image pruneseparately to remove unused containers, networks, and images, without removing volumes.
The filtering flag (
--filter) format is of “key=value”. If there is more
than one filter, then pass multiple flags (e.g.,
--filter "foo=bar" --filter "bif=baz")
The currently supported filters are:
- until (
<timestamp>) - only remove containers, images, and networks created before given timestamp
- label (
label!=<key>=<value>) - only remove containers, images, networks, and volumes with (or without, in case
label!=...is used) the specified labels.
until filter can be Unix timestamps, date formatted
timestamps, or Go duration strings (e.g.
relative to the daemon machine’s time. Supported formats for date
formatted time stamps include RFC3339Nano, RFC3339,
2006-01-02. The local
timezone on the daemon will be used if you do not provide either a
Z or a
+-00:00 timezone offset at the end of the timestamp. When providing Unix
timestamps enter seconds[.nanoseconds], where seconds is the number of seconds
that have elapsed since January 1, 1970 (midnight UTC/GMT), not counting leap
seconds (aka Unix epoch or Unix time), and the optional .nanoseconds field is a
fraction of a second no more than nine digits long.
label filter accepts two formats. One is the
which removes containers, images, networks, and volumes with the specified labels. The other
format is the
label!=<key>=<value>), which removes
containers, images, networks, and volumes without the specified labels.