Reclaiming Unused Docker Space
This morning I noticed my server’s disk space was already used more than 90% and trends shown by my InfluxDB dashboards
showed, it would be fully depleted soon if I didn’t do anything about it.
So, I used du -hn 1 starting from / to track down where the disk space was used, and it showed Docker was the culprit.
Further analysis pointed me to the /var/snap/docker/common/var-lib-docker/overlay2 directory, so I searched the
internet for a way to clean up this directory.
docker system prune
My first hit pointed me to docker system prune, which allows to
remove all images and containers not currently in use by active containers. I wanted a bit more information on which
data would be removed and also found docker system df to tell me about it:
$ sudo docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 148 13 75.48GB 73.11GB (96%)
Containers 15 14 43.37GB 259.1kB (0%)
Local Volumes 15 1 17.07GB 16.85GB (98%)
Build Cache 0 0 0B 0B
The RECLAIMABLE part looked really good and as I had all containers I need up-and-running, I decided to run
docker system prune. Checking docker system df again showed a large improvement:
$ sudo docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 53 13 12.76GB 9.689GB (75%)
Containers 15 15 43.38GB 0B (0%)
Local Volumes 15 1 17.07GB 16.85GB (98%)
Build Cache 0 0 0B 0B
This already reclaimed a lot of disk space, pushing down usage from 90%+ to about 65%!
docker volume prune
As can be seen in the last output from sudo docker system df, there is still ’local volumes’ space that can be
reclaimed. Apparently docker system prune does not include that.
So, I used docker volume prune to reclaim space occupied by unused volumes, resulting in:
$ sudo docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 53 13 12.76GB 9.689GB (75%)
Containers 15 12 43.43GB 549.7kB (0%)
Local Volumes 1 1 219.1MB 0B (0%)
Build Cache 0 0 0B 0B
Disk space usage is now pushed down to 58%!
Update 2023-09-27:docker system prune does not reclaim space for all images. To do that, use docker image prune -a which
will also remove all images not related to a container.
sudo docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 168 39 51.18GB 36.39GB (71%)
Containers 40 40 528.5MB 0B (0%)
Local Volumes 49 10 923.4MB 406.8kB (0%)
Build Cache 33 0 0B 0B
After running docker image prune only 2 images have been removed:
sudo docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 166 39 51.09GB 36.3GB (71%)
Containers 40 40 528.5MB 0B (0%)
Local Volumes 49 10 923.4MB 406.8kB (0%)
Build Cache 33 0 0B 0B
After running sudo docker image prune -a only 39 images remain worth ~16GB:
sudo docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 39 39 16.37GB 1.293GB (7%)
Containers 40 40 528.5MB 0B (0%)
Local Volumes 49 10 923.4MB 406.8kB (0%)
Build Cache 33 0 0B 0B
Conclusion
Experimenting with running applications in Docker is really fun, but it leaves behind a lot of mess…
Regularly check your disk space usage using docker system df and clean if needed using docker system prune
and docker volume prune.
February 2, 2021