Reputation: 15420
I recently started using Docker and never realized that I should use docker-compose down
instead of ctrl-c
or docker-compose stop
to get rid of my experiments. I now have a large number of unneeded docker images locally.
Is there a flag I can run to delete all the local docker images & containers?
Something like docker rmi --all --force
--all flag does not exist but I am looking for something with similar idea.
Upvotes: 1100
Views: 1352502
Reputation: 1122
To remove all images without at least one container associated to them
$ docker image prune -a
To get all the names of the images : docker images -a -q
and remove all images using this command in the same line.
$ docker image rmi $(docker images -a -q)
If you have images attached to at least one of the running containers, it is a good idea to stop them first.
To remove images created more than 10 days (240 h) ago:
$ docker image prune -a --force --filter "until=240h"
You can verify by using the following command:
$ docker images --format 'table {{.Repository}}\t{{.Tag}}\t{{.ID}}\t{{.CreatedAt}}\t{{.Size}}'
Upvotes: 10
Reputation: 21
Robert Answer worked fine for me, but I run additional command for removing unused volumes.
I know the question is about removing images, but it seems like answers are walking to get a clean stage.
Only run next command if you really want to kill, delete, destroy and lost all data saved in the volumes by the containers applications and services.
docker volume prune --all
Upvotes: 2
Reputation: 1
This command deletes all the unused images, including dangling (unreferenced) images as well as not associated with any container, from your local docker container
docker image prune --all
Upvotes: -1
Reputation: 31040
Add a filter, with -f
.
docker rmi -f $(docker images -af <YOUR_FILTER_PATTERN> -q)
E.g. if docker images
returns:
image3 latest 3a371a8efe91 12 days ago 987MB
image2 latest cca6cd42c697 12 days ago 987MB
image1 latest 0373470f2972 12 days ago 987MB
image0 latest 1a99848b511f 13 days ago 987MB
node 18 5087dac9940a 2 weeks ago 947MB
nginx latest 8a5e3e44915c 2 weeks ago 135MB
alpine latest 04eeaa5f8c35 6 weeks ago 7.46MB
hello-world latest 46331d942d63 11 months ago 9.14kB
-f since=*
docker rmi -f $(docker images -af since=node:18 -q)
will result in:
node 18 5087dac9940a 2 weeks ago 947MB
nginx latest 8a5e3e44915c 2 weeks ago 135MB
alpine latest 04eeaa5f8c35 6 weeks ago 7.46MB
hello-world latest 46331d942d63 11 months ago 9.14kB
There are a few options including since
,before
,label
or reference
(pattern match). The docs.
This might be useful if you have a development loop involving repeated builds, but want to keep the base OS local (e.g. node) to avoid repeated downloads.
Upvotes: 1
Reputation: 3104
To delete all images :
docker rmi $(docker images -a -q)
where -a is all, and -q is return only image ids
To remove unused images, and containers :
docker system prune
beware as if you are using docker swarm, and your local machine is joining remote swarm (as manager/worker), your local will be the deployed repo. executing this thus removes the deployed images.
Upvotes: 4
Reputation: 3120
Another way with xargs
(Unix only)
docker image ls -q | xargs -I {} docker image rm -f {}
Upvotes: 3
Reputation: 10236
If you need to delete without invoking docker (for example, if docker is broken and does not start, has been removed itself but not its images, etc):
systemctl stop docker # stop docker if it was running
rm -rf /var/lib/docker
This directly removes ALL docker images/containers/volumes from the filesystem.
Upvotes: 4
Reputation: 831
To delete all images:
docker rmi -f $(docker images -a | awk {'print $3'})
Explanation:
docker images -a | awk {'print $3'}
This command will return all image id's and then used to delete image using its id.
Upvotes: 4
Reputation: 311
For Linux Ubuntu user, below worked for me. Word of Caution- It will remove all by the way.
For removing containers along with volumes associated with it, use below:
sudo docker rm -vf $(sudo docker ps -a -q)
For Removing images use below:
sudo docker rmi -f $(sudo docker images -a -q)
Upvotes: 11
Reputation: 1251
Easy and handy commands
To delete all images
docker rmi $(docker images -a)
To delete containers which are in exited state
docker rm $(docker ps -a -f status=exited -q)
To delete containers which are in created state
docker rm $(docker ps -a -f status=created -q)
NOTE: Remove all the containers then remove the images
Upvotes: 23
Reputation: 1876
docker image prune -a
Remove all unused images, not just dangling ones. Add
-f
option to force.
Local docker version: 17.09.0-ce, Git commit: afdb6d4, OS/Arch: darwin/amd64
$ docker image prune -h
Flag shorthand -h has been deprecated, please use --help
Usage: docker image prune [OPTIONS]
Remove unused images
Options:
-a, --all Remove all unused images, not just dangling ones
--filter filter Provide filter values (e.g. 'until=<timestamp>')
-f, --force Do not prompt for confirmation
--help Print usage
Upvotes: 58
Reputation: 4580
Docker provides a single command that will clean up any resources — images, containers, volumes, and networks — that are dangling (not associated with a container):
docker system prune
To additionally remove any stopped containers and all unused images (not just dangling images), add the -a
flag to the command:
docker system prune -a
For more details visit link
Upvotes: 128
Reputation: 36773
Use this to delete everything:
docker system prune -a --volumes
Remove all unused containers, volumes, networks and images
WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all volumes not used by at least one container
- all images without at least one container associated to them
- all build cache
https://docs.docker.com/engine/reference/commandline/system_prune/#extended-description
Upvotes: 727
Reputation: 26967
Unix
To delete all containers including its volumes use,
docker rm -vf $(docker ps -aq)
To delete all the images,
docker rmi -f $(docker images -aq)
Remember, you should remove all the containers before removing all the images from which those containers were created.
Windows - Powershell
docker images -a -q | % { docker image rm $_ -f }
Windows - cmd.exe
for /F %i in ('docker images -a -q') do docker rmi -f %i
Upvotes: 2323
Reputation: 9630
Here is the command I used and put it in a batch file to remove everything:
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;
Upvotes: 1
Reputation: 129
docker rmi $(docker images -a)
To remove all the images
docker stop $(docker ps -q)
To remove all the containers
Upvotes: 0
Reputation: 749
To remove any stopped containers and all unused images.
docker system prune -a
To delete unused images, containers and volumes then run the following command
docker system prune -a -f
Upvotes: 0
Reputation: 91
Check docker containers volume
docker system df
Prune all images and volumes
docker prune --all
Upvotes: 1
Reputation: 17999
The other answers don't seem to provide an easy way to delete just the containers with "auto-generated" names. This is my most frequent intent, so I wrote a Powershell script for it:
$containers = (docker container list -a).Split("`n") | % { [regex]::split($_, "\s+") | Select -Last 1 }
$containersToRemove = $containers | Where { ([regex]"^[a-z]+_[a-z]+$").IsMatch($_) }
# it's recommended to delete in batches, as too many at once can cause issues
$containersToRemove = $containersToRemove | Select-Object -First 30
foreach ($container in $containersToRemove) {
# sync/wait-based version (slow)
# docker container rm $container
# async/background-process version (fast)
Start-Process -FilePath docker -ArgumentList "container rm $container" -NoNewWindow
}
Take caution of course, as this script is just using a regular-expression: ^[a-z]+_[a-z]+$
So only use it if you know that the containers you care about do not use the same format (of lowercase-word, underscore, lowercase-word); or at least only run the first two lines, run echo $containersToRemove
, and check the list before actually executing the deletions.
Upvotes: 0
Reputation: 6732
There is a bug in Windows where disk space is not reclaimed after removing the images. Rebooting Docker / Windows did not work.
In case you are using Docker Desktop, the following worked for me. Go to Troubleshoot -> Clean / purge data. This can save you a lot of disk space, maybe more than you wanted.
Please note: this removes everything, so think twice before doing this!
Upvotes: 14
Reputation: 33
sudo docker rm image <image_id>
/ docker rm image <image_id>
Upvotes: 2
Reputation: 569
To delete all Docker local Docker images follow 2 steps ::
step 1 : docker images ( list all docker images with ids )
example :
REPOSITORY TAG IMAGE ID CREATED SIZE
pradip564/my latest 31e522c6cfe4 3 months ago 915MB
step 2 : docker image rm 31e522c6cfe4 ( IMAGE ID)
OUTPUT : image deleted
Upvotes: 1
Reputation: 724
Adding to techtabu's accepted answer, If you're using docker on windows, you can use the following command
for /F "delims=" %A in ('docker ps -a -q') do docker rm %A
here, the command docker ps -a -q
lists all the images and this list is passed to docker rm
one by one
see this for more details on how this type of command format works in windows cmd.
Upvotes: 1