Skip to content

Instantly share code, notes, and snippets.

Created March 31, 2016 05:55
Show Gist options
  • Save bastman/5b57ddb3c11942094f8d0a97d461b430 to your computer and use it in GitHub Desktop.
Save bastman/5b57ddb3c11942094f8d0a97d461b430 to your computer and use it in GitHub Desktop.
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:

$ 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:

$ 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:

$ 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
Copy link

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.

Copy link

blankdots commented Apr 7, 2017

What about pruning the networks
$ docker network prune
And docker system prune
$ docker system prune

They seem less distructive.

Copy link

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

Copy link

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

Copy link

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

Copy link

zenglian commented Nov 2, 2017

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

Copy link

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!

Copy link

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

Copy link

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 :

Copy link

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).

Copy link

Genovo commented May 2, 2018

docker system info
will give the lay of the land

Copy link

I came here to add the same comment as @cies. Running the commands in the order listed always results in me going back to the images command after I run the containers command.

Copy link

Stack Overflow: How to clean up Docker is what I was searching when I came here.

Copy link

rbucker commented Jul 12, 2018

Nice work... what is the best way to clean up a swarm cluster?

Copy link

Muito bom!

Copy link

SebastianPozoga commented Oct 26, 2018

I prepared docker image to automate it. The image delete unused images and conatainers only.

Docker Hub

Copy link

kolyabres commented Nov 6, 2018

resize disk for users that use dinghy

docker-machine rm dinghy                                          //delete the current virtual machine
dinghy create --provider virtualbox --disk=100000  // create the new one

Copy link

don't you feel Docker has way too many flags and options... wouldn't be easier if all efforts were focused on docker-composer and restrict the yml configuration leaving the freedom for the dockerfiles?
I feel docker is overengineered and misplanned. The learning curve isn't because of the complexity of the system, it's because the bad UX.

Copy link

irizzant commented Mar 6, 2019

docker system prune -fa --volumes will do the trick without prompting for confirmation.
Remove -f if you want to be prompted for confirmation

Copy link

reg2005 commented Mar 18, 2019

For docker swarm just create stack:

version: '3.3'
    image: docker:latest
    command: docker system prune --all --force
     - /var/run/docker.sock:/var/run/docker.sock
     - default
      driver: json-file
      mode: global
        delay: 86400s
    driver: overlay

Thanks for this @Monokai, original comment

Copy link

dylanh724 commented Apr 4, 2019

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

"docker rmi" requires at least 1 argument."

But I have tons of old images dating back years ago?


EDIT: This worked,

docker images --no-trunc --format '{{.ID}} {{.CreatedSince}}' \
    | grep ' months' | awk '{ print $1 }' \
    | xargs --no-run-if-empty docker rmi

Copy link

Not sure, if docker-swarm works properly. @reg2005 - it removes it after start, but it doesn't do it periodically. Can you please describe how you restart this service? Do you have cron for recreate service.

I think that

      mode: global
        delay: 86400s

doesn't work properly.

Copy link

//clear all

$docker kill $(docker ps -q) ; docker rm $(docker ps -a -q) ; docker rmi $(docker images -q -a)

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