Skip to content

Instantly share code, notes, and snippets.

@michaelneale
Last active July 20, 2021 15:37
Show Gist options
  • Star 50 You must be signed in to star a gist
  • Fork 14 You must be signed in to fork a gist
  • Save michaelneale/1366325a7737c4cb80b0 to your computer and use it in GitHub Desktop.
Save michaelneale/1366325a7737c4cb80b0 to your computer and use it in GitHub Desktop.
#!/bin/sh
remove_dangling() {
echo "Removing dangling images ..."
docker rmi $(docker images -f dangling=true -q)
}
remove_stopped_containers() {
echo "Removing stopped containers ..."
docker rm $(docker ps -qa)
}
case $1 in
images)
remove_dangling
;;
containers)
read -p "Are you sure you want to remove all stopped containers?" -n 1 -r
echo #
if [[ $REPLY =~ ^[Yy]$ ]]
then
remove_stopped_containers
fi
;;
*)
echo "
usage: docker-clean containers|images
containers - removes all stopped containers it can.
images - removes dangling (un-needed) image layers - images you no longer need
"
;;
esac
@DamonOehlman
Copy link

Thanks mate :)

Though a bigger disk does sound nice...

@michaelneale
Copy link
Author

also docker run --rm to stop them building up...

@twillouer
Copy link

docker rmi $(docker images -f dangling=true -q), no ? :)

@michaelneale
Copy link
Author

@twillouer ah yes - for some reason that didn't make it from my local copy - well spotted. Corrected.

@michaelneale
Copy link
Author

thanks to @huntc for mentioning "dangling" to be (I would have though it was a joke).

@tfennelly
Copy link

I ran into this issue doing what seems to be fairly lightweight stuff. In my case, even after cleaning out all containers and images, I still have about 25Gb of images according to docker (docker images -a | tr -s ' ' | cut -d ' ' -f 7 | awk '{s+=$1} END {print s}'). That must not be totally accurate though because VB says that the VMDK image is 19Gb.

Going to try https://docs.docker.com/articles/b2d_volume_resize/ since apparently those VMDK images are not resizable.

@ryanramage
Copy link

Should

docker rmi $(docker images -f dangling=true -q)

be

docker rmi -f $(docker images dangling=true -q)

Seems to me the -f is to force the delete of the image id.

@tupy
Copy link

tupy commented May 19, 2016

Also remove volumes with docker volume rm $(docker volume ls -qf dangling=true)

@kenyee
Copy link

kenyee commented Dec 29, 2016

Be sure to do what tupy suggested only after you get your current containers running so you don't pure volumes that they might be using if they weren't running ;-)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment