Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Remove all from Docker
# Stop all containers
docker stop `docker ps -qa`
# Remove all containers
docker rm `docker ps -qa`
# Remove all images
docker rmi -f `docker images -qa `
# Remove all volumes
docker volume rm $(docker volume ls -qf)
# Remove all networks
docker network rm `docker network ls -q`
# Your installation should now be all fresh and clean.
# The following commands should not output any items:
# docker ps -a
# docker images -a
# docker volume ls
# The following command show only show the default networks:
# docker network ls
@AvgustPol
Copy link

AvgustPol commented Nov 8, 2018

<3

@MeharGaur
Copy link

MeharGaur commented Dec 9, 2018

this is awesome lol

@catruck
Copy link

catruck commented Jan 23, 2019

nice

@samhk222
Copy link

samhk222 commented Feb 26, 2019

the "f" parameter in docker volume rm $(docker volume ls -qf) is for filter. if you don't specify it, it'll raise an error. But it's safe to ommit the f parameter, or here is the list of available filters:

  • dangling (boolean - true or false, 0 or 1)
  • driver (a volume driver’s name)
  • label (label= or label==)
  • name (a volume’s name)

Example:
docker volume rm $(docker volume ls -qf dangling="true")

@AymAZR
Copy link

AymAZR commented Mar 26, 2019

@samhk222 docker volume rm $(docker volume ls -qf dangling="true") works perfectly! Thanks a lot!

@KonradLinkowski
Copy link

KonradLinkowski commented May 20, 2020

Oneliner

docker stop `docker ps -qa` && docker rm `docker ps -qa` && docker rmi -f `docker images -qa ` && docker volume rm $(docker volume ls -qf) && docker network rm `docker network ls -q`

@acjohnson
Copy link

acjohnson commented Jul 2, 2020

Better and more destructive oneliner

docker stop $(docker ps -qa); docker rm $(docker ps -qa); docker rmi -f $(docker images -qa); docker volume rm $(docker volume ls -q); docker network rm $(docker network ls -q)

@minhlong
Copy link

minhlong commented Jul 11, 2020

<3 you save me. Thank you

@nash403
Copy link

nash403 commented Sep 25, 2020

thnx !! 😃

@Maxzor
Copy link

Maxzor commented Sep 28, 2020

Shell scripts are damn ugly. But shell is so powerful 🙃
Why is rm -rf --all not in the docker binary lol...
Sigh, another try which does the same, but outputs less noise and adds a bit of sugar :

echo "Removing containers :" && if [ -n "$(docker container ls -aq)" ]; then docker container stop $(docker container ls -aq); docker container rm $(docker container ls -aq); fi; echo "Removing images :" && if [ -n "$(docker images -aq)" ]; then docker rmi -f $(docker images -aq); fi; echo "Removing volumes :" && if [ -n "$(docker volume ls -q)" ]; then docker volume rm $(docker volume ls -q); fi; echo "Removing networks :" && if [ -n "$(docker network ls | awk '{print $1" "$2}' | grep -v 'ID\|bridge\|host\|none' | awk '{print $1}')" ]; then docker network rm $(docker network ls | awk '{print $1" "$2}' | grep -v 'ID\|bridge\|host\|none' | awk '{print $1}'); fi;

Readable bash script at https://gist.github.com/Maxzor/6a3ca2c5c1c28af583711abc8e5fda01

@mrmillers
Copy link

mrmillers commented Nov 30, 2020

Pre-defined network(bridge host none) can be ignored.

docker network rm `docker network ls -q --filter type=custom`

This will get rid of the following error message:

Error response from daemon: bridge is a pre-defined network and cannot be removed
Error response from daemon: host is a pre-defined network and cannot be removed
Error response from daemon: none is a pre-defined network and cannot be removed

@se7enack
Copy link

se7enack commented Dec 22, 2020

Oneliner

docker stop `docker ps -qa` && docker rm `docker ps -qa` && docker rmi -f `docker images -qa ` && docker volume rm $(docker volume ls -qf) && docker network rm `docker network ls -q`

In this case I'd personally replace the '&&' with a ';' so they all run and in series or even a single '&' to run parallel. You don't want to to stop deleting the rest if one list returns nothing. Example, say there are no volumes, this will fail at that step and not delete the networks. && is mostly useful if the next command is predicated on the previous command having completed successful.

Fastest Method:

docker stop `docker ps -qa` ; docker rm `docker ps -qa` & docker rmi -f `docker images -qa ` & docker volume rm $(docker volume ls -qf) & docker network rm `docker network ls -q`

@KonradLinkowski
Copy link

KonradLinkowski commented Dec 22, 2020

Oneliner

docker stop `docker ps -qa` && docker rm `docker ps -qa` && docker rmi -f `docker images -qa ` && docker volume rm $(docker volume ls -qf) && docker network rm `docker network ls -q`

In this case I'd personally replace the '&&' with a ';' so they all run and in series or even a single '&' to run parallel. You don't want to to stop deleting the rest if one list returns nothing. Example, say there are no volumes, this will fail at that step and not delete the networks. && is mostly useful if the next command is predicated on the previous command having completed successful.

Fastest Method:

docker stop `docker ps -qa` ; docker rm `docker ps -qa` & docker rmi -f `docker images -qa ` & docker volume rm $(docker volume ls -qf) & docker network rm `docker network ls -q`

Somebody already did it
https://gist.github.com/beeman/aca41f3ebd2bf5efbd9d7fef09eac54d#gistcomment-3362258

@emersonmx
Copy link

emersonmx commented Jan 13, 2021

Try this 👍

docker stop `docker ps -qa`
docker system prune --volumes --all

@ethicalhack3r
Copy link

ethicalhack3r commented Feb 9, 2021

You have a typo, it should be:

docker system prune --volumes --all (note plural volumes)

Try this 👍

docker stop `docker ps -qa`
docker system prune --volume --all

@emersonmx
Copy link

emersonmx commented Feb 9, 2021

Thanks 😅
I just type without testing in a terminal.

You have a typo, it should be:

docker system prune --volumes --all (note plural volumes)

Try this +1

docker stop `docker ps -qa`
docker system prune --volume --all

@evanbiederstedt
Copy link

evanbiederstedt commented Feb 24, 2021

BTW, it appears for me that the command above to delete Docker volumes is outdated; I get an error:

docker volume ls -qf
flag needs an argument: 'f' in -f
See 'docker volume ls --help'.

The command is now docker volume ls -q, I think. Here is my docker version:

 docker --version
Docker version 20.10.2, build 2291f61

I recommend:

docker stop $(docker ps -qa); docker rm $(docker ps -qa); docker rmi -f $(docker images -qa); docker volume rm $(docker volume ls -q); docker network rm $(docker network ls -q)

@abrichr
Copy link

abrichr commented May 7, 2021

Here's a script that doesn't generate any errors, including if there are no containers/images/volumes/networks:

#!/bin/bash

echo "Listing containers..."
containers=$(docker ps -qa)
echo "containers: $containers"

if [ ! -z "$containers" ]
then
    echo "Stopping containers..."
    docker stop $containers
    echo "Removing containers..."
    docker rm $containers
else
    echo "No containers found"
fi

echo "Listing images..."
images=$(docker images -qa)
echo "images: $images"

if [ ! -z "$images" ]
then
    echo "Removing images..."
    docker rmi -f $images
else
    echo "No images found"
fi

echo "Listing volumes..."
volumes=$(docker volume ls -q)
echo "volumes: $volumes"

if [ ! -z "$volumes" ]
then
    echo "Removing volumes..."
    docker volume rm $volumes
else
    echo "No volumes found"
fi

echo "Listing networks..."
networks=$(docker network ls -q)
echo "networks: $networks"

if [ ! -z "$networks" ]
then
    echo "Removing networks..."
    docker network rm $networks
else
    echo "No networks found"
fi

echo "These should not output any items:"
docker ps -a
docker images -a 
docker volume ls

echo "This should only show the default networks:"
docker network ls

@arlanram
Copy link

arlanram commented May 25, 2021

docker stop $(docker ps -qa)
docker system prune -a

that's all you need to remove everything

@iMonZ
Copy link

iMonZ commented Jun 7, 2021

Hey this line $(...) doesn't work with fish. Is there an alternative that works everywhere?

@altendky
Copy link

altendky commented Aug 1, 2021

Just drop the $, at least for that bit of fish. Or just run bash and then paste in the command.

@KristerV
Copy link

KristerV commented Aug 2, 2021

Here's the fish version for clarity.

docker stop (docker ps -qa);
docker rm (docker ps -qa);
docker rmi -f (docker images -qa);
docker volume rm (docker volume ls -q);
docker network rm (docker network ls -q);

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