-
-
Save mlebkowski/471d2731176fb11e81aa to your computer and use it in GitHub Desktop.
#!/bin/bash | |
# remove exited containers: | |
docker ps --filter status=dead --filter status=exited -aq | xargs -r docker rm -v | |
# remove unused images: | |
docker images --no-trunc | grep '<none>' | awk '{ print $3 }' | xargs -r docker rmi | |
# remove unused volumes: | |
find '/var/lib/docker/volumes/' -mindepth 1 -maxdepth 1 -type d | grep -vFf <( | |
docker ps -aq | xargs docker inspect | jq -r '.[] | .Mounts | .[] | .Name | select(.)' | |
) | xargs -r rm -fr |
@danstreeter, yep, this is just a part of the blog post where I mentioned the solution you posted. This is, however, only for docker version 1.9
and later
thanks for the script, it's great 😄
I've updated the remove unused images part a bit
#!/bin/bash
# remove exited containers:
docker ps --filter status=dead --filter status=exited -aq | xargs -r docker rm -v
# remove unused images:
local images=`docker images --no-trunc`;
local lines=$(echo "$images" | awk '{print $2}' | grep -n "<none>" | cut -d: -f1 | sed 's/$/p/g');
lines=`echo $lines`;
lines=${lines// /;};
local image_ids=$(echo "$images" | awk '{print $3}' | sed -n "$lines");
[[ -n "${image_ids[@]}" ]] && docker rmi ${image_ids[@]}
# remove unused volumes:
find '/var/lib/docker/volumes/' -mindepth 1 -maxdepth 1 -type d | grep -vFf <(
docker ps -aq | xargs docker inspect | jq -r '.[] | .Mounts | .[] | .Name | select(.)'
) | xargs -r rm -fr
Since the latest docker version there are special prune commands:
#!/bin/bash
# remove exited containers:
docker ps --filter status=dead --filter status=exited -aq | xargs -r docker rm -v
# remove unused containers:
yes | docker container prune
# remove unused images:
yes | docker image prune
# remove unused volumes:
yes | docker volume prune
@zaplatynski 👏 🎉
As of today, all prune commands were merged into single docker system prune
: https://docs.docker.com/engine/reference/commandline/system_prune/#examples
Which is a terrible design choice because it unknowingly purges just about everything useful to use Docker by default, which causes a ton of development overhead helping colleagues recover network configuration, etc. when simply trying to free up space on the system.
Docker seems to mess up just about everything they do.
Hey - Found this on your site and it really helped me out - thanks, however I think you can deal with the unused volumes with inbuilt commands instead of drilling through your filesystem with a complex command:
docker volume ls -f dangling=true | awk '{ print $2 }' | xargs docker volume rm