Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
docker cleanup guide: containers, images, volumes, networks

Docker - How to cleanup (unused) resources

Once in a while, you may need to cleanup resources (containers, volumes, images, networks) ...

delete volumes

// see: https://github.com/chadoe/docker-cleanup-volumes

$ docker volume rm $(docker volume ls -qf dangling=true)
$ docker volume ls -qf dangling=true | xargs -r docker volume rm

delete networks

$ docker network ls  
$ docker network ls | grep "bridge"   
$ docker network rm $(docker network ls | grep "bridge" | awk '/ / { print $1 }')

remove docker images

// see: http://stackoverflow.com/questions/32723111/how-to-remove-old-and-unused-docker-images

$ docker images
$ docker rmi $(docker images --filter "dangling=true" -q --no-trunc)

$ docker images | grep "none"
$ docker rmi $(docker images | grep "none" | awk '/ / { print $3 }')

remove docker containers

// see: http://stackoverflow.com/questions/32723111/how-to-remove-old-and-unused-docker-images

$ docker ps
$ docker ps -a
$ docker rm $(docker ps -qa --no-trunc --filter "status=exited")

Resize disk space for docker vm

$ docker-machine create --driver virtualbox --virtualbox-disk-size "40000" default
@t-hofmann

This comment has been minimized.

Show comment Hide comment
@t-hofmann

t-hofmann Apr 3, 2017

regarding bridge networks I find the following modification more robust:

docker network ls | awk '$3 == "bridge" && $2 != "bridge" { print $1 }'

In this example I do not want to delete the network named ($2) "bridge", if I am not mistaken that network is predefined by docker.

regarding bridge networks I find the following modification more robust:

docker network ls | awk '$3 == "bridge" && $2 != "bridge" { print $1 }'

In this example I do not want to delete the network named ($2) "bridge", if I am not mistaken that network is predefined by docker.

@blankdots

This comment has been minimized.

Show comment Hide comment
@blankdots

blankdots Apr 7, 2017

What about pruning the networks https://docs.docker.com/engine/reference/commandline/network_prune/:
$ docker network prune
And docker system prune https://docs.docker.com/engine/reference/commandline/system_prune/:
$ docker system prune

They seem less distructive.

blankdots commented Apr 7, 2017

What about pruning the networks https://docs.docker.com/engine/reference/commandline/network_prune/:
$ docker network prune
And docker system prune https://docs.docker.com/engine/reference/commandline/system_prune/:
$ docker system prune

They seem less distructive.

@ibussieres

This comment has been minimized.

Show comment Hide comment
@ibussieres

ibussieres May 3, 2017

@blankdots those are great, but are only available as of 1.13.

@blankdots those are great, but are only available as of 1.13.

@professordennis

This comment has been minimized.

Show comment Hide comment
@professordennis

professordennis Sep 28, 2017

To delete volumes, use: docker volume rm $(docker volume ls -f 'dangling=true')
The "-f" parameter is necessary for describe the filter ('dangling=true'). [[]]'s

To delete volumes, use: docker volume rm $(docker volume ls -f 'dangling=true')
The "-f" parameter is necessary for describe the filter ('dangling=true'). [[]]'s

@thebaconguy

This comment has been minimized.

Show comment Hide comment
@thebaconguy

thebaconguy Oct 6, 2017

$ docker system prune -a

WARNING! This will remove:
	- all stopped containers
	- all volumes not used by at least one container
	- all networks not used by at least one container
	- all images without at least one container associated to them
Are you sure you want to continue? [y/N] y

----> from documentation example

I was looking for a clean everything (almost, see EDIT below) not running or in use command to do a clean reset before installing Rancher to manage the entire system (highly recommend watching the demo and trying it out btw!). Hope this comes in handy for someone else looking for a fresh start! You can still use the filtering arguments to prune only resources matching a certain label or before a certain timestamp.

Thanks to @blankdots for the suggestion above to look into the docker system prune commands!

EDIT: This does not seem to include removal of unused/dangling volumes, so @professordennis's suggestion is still best to use for that case:

$ docker volume rm $(docker volume ls -f dangling=true -q)

----> also found from this documentation

thebaconguy commented Oct 6, 2017

$ docker system prune -a

WARNING! This will remove:
	- all stopped containers
	- all volumes not used by at least one container
	- all networks not used by at least one container
	- all images without at least one container associated to them
Are you sure you want to continue? [y/N] y

----> from documentation example

I was looking for a clean everything (almost, see EDIT below) not running or in use command to do a clean reset before installing Rancher to manage the entire system (highly recommend watching the demo and trying it out btw!). Hope this comes in handy for someone else looking for a fresh start! You can still use the filtering arguments to prune only resources matching a certain label or before a certain timestamp.

Thanks to @blankdots for the suggestion above to look into the docker system prune commands!

EDIT: This does not seem to include removal of unused/dangling volumes, so @professordennis's suggestion is still best to use for that case:

$ docker volume rm $(docker volume ls -f dangling=true -q)

----> also found from this documentation

@zenglian

This comment has been minimized.

Show comment Hide comment
@zenglian

zenglian Nov 2, 2017

how to clean it before starting docker? docker cannot be started due to no space.

zenglian commented Nov 2, 2017

how to clean it before starting docker? docker cannot be started due to no space.

@demorphica

This comment has been minimized.

Show comment Hide comment
@demorphica

demorphica Dec 18, 2017

just faced an inode exhaustion issue on ext4 & freed up ~18.5 million inodes out of 19 million total inodes using the image cleanup command.
Thank you!

just faced an inode exhaustion issue on ext4 & freed up ~18.5 million inodes out of 19 million total inodes using the image cleanup command.
Thank you!

@tindvik

This comment has been minimized.

Show comment Hide comment
@tindvik

tindvik Jan 4, 2018

@thebaconguy If you want to remove volumes with the prune command you can run this command:
docker system prune -a --volumes

tindvik commented Jan 4, 2018

@thebaconguy If you want to remove volumes with the prune command you can run this command:
docker system prune -a --volumes

@ZerooCool

This comment has been minimized.

Show comment Hide comment
@ZerooCool

ZerooCool Feb 1, 2018

I use tutum/lamp image docker. ( 500 Mo )
Then, i update upgrade in the shell
Then, i add php curl
I save the image, i have a file with 750Mo.

Then, i import this file.
update upgrade and clean
I save this, and, the new image is fat ( 950 Mo )

How i can clean my file and have a good size ( 500 / 600 mo ? )

More Docker command in French : https://www.visionduweb.eu/wiki/index.php?title=Ajouter_Docker_sur_GNU_Linux

ZerooCool commented Feb 1, 2018

I use tutum/lamp image docker. ( 500 Mo )
Then, i update upgrade in the shell
Then, i add php curl
I save the image, i have a file with 750Mo.

Then, i import this file.
update upgrade and clean
I save this, and, the new image is fat ( 950 Mo )

How i can clean my file and have a good size ( 500 / 600 mo ? )

More Docker command in French : https://www.visionduweb.eu/wiki/index.php?title=Ajouter_Docker_sur_GNU_Linux

@cies

This comment has been minimized.

Show comment Hide comment
@cies

cies Feb 23, 2018

Small comment: first remove the containters, then remove the images. Just a small re-order, but it saves a potential error (as images that are bound to contains cannot be deleted).

cies commented Feb 23, 2018

Small comment: first remove the containters, then remove the images. Just a small re-order, but it saves a potential error (as images that are bound to contains cannot be deleted).

@Genovo

This comment has been minimized.

Show comment Hide comment
@Genovo

Genovo May 2, 2018

docker system info
will give the lay of the land

Genovo commented May 2, 2018

docker system info
will give the lay of the land

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