You can alleviate low disk space on filesystem root issues by pruning redundant docker objects. Docker takes a conservative approach to clean up unused objects (often referred to as “garbage collection”), such as images, containers, volumes, and networks: these objects are generally not removed unless you explicitly ask Docker to do so. This can cause Docker to use extra disk space. For each type of object, Docker provides a prune
command. In addition, you can use docker system prune
to clean up multiple types of objects at once. This topic shows how to use these prune
commands.
The docker image prune
command allows you to clean up unused images. By default, docker image prune
only cleans up dangling images. A dangling image is one that is not tagged and is not referenced by any container. To remove dangling images:
$ docker image prune
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N]
To remove all images which are not used by existing containers, use the -a
flag:
$ docker image prune -a
WARNING! This will remove all images without at least one container associated to them.
Are you sure you want to continue? [y/N] y
By default, you are prompted to continue. To bypass the prompt, use the -f
or --force
flag.
You can limit which images are pruned using filtering expressions with the --filter
flag. For example, to only consider images created more than 24 hours ago:
$ docker image prune -a --filter "until=24h"
Other filtering expressions are available. See the docker image prune
reference for more examples.
When you stop a container, it is not automatically removed unless you started it with the --rm
flag. To see all containers on the Docker host, including stopped containers, use docker ps -a
. You may be surprised how many containers exist, especially on a development system! A stopped container’s writable layers still take up disk space. To clean this up, you can use the docker container prune
command.
$ docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
By default, you are prompted to continue. To bypass the prompt, use the -f
or --force
flag.
By default, all stopped containers are removed. You can limit the scope using the --filter
flag. For instance, the following command only removes stopped containers older than 24 hours:
$ docker container prune --filter "until=24h"
Other filtering expressions are available. See the docker container prune
reference for more examples.
Volumes can be used by one or more containers, and take up space on the Docker host. Volumes are never removed automatically because to do so could destroy data.
$ docker volume prune
WARNING! This will remove all volumes not used by at least one container.
Are you sure you want to continue? [y/N] y
By default, you are prompted to continue. To bypass the prompt, use the -f
or --force
flag.
By default, all unused volumes are removed. You can limit the scope using the --filter
flag. For instance, the following command only removes volumes that are not labeled with the keep
label:
$ docker volume prune --filter "label!=keep"
Other filtering expressions are available. See the docker volume prune
reference for more examples.
Docker networks don’t take up much disk space, but they do create iptables
rules, bridge network devices, and routing table entries. To clean these things up, you can use docker network prune
to clean up networks that aren’t used by any containers.
$ docker network prune
WARNING! This will remove all networks not used by at least one container.
Are you sure you want to continue? [y/N] y
By default, you are prompted to continue. To bypass the prompt, use the -f
or --force
flag.
By default, all unused networks are removed. You can limit the scope using the --filter
flag. For instance, the following command only removes networks older than 24 hours:
$ docker network prune --filter "until=24h"
Other filtering expressions are available. See the docker network prune
reference for more examples.
The docker system prune
command is a shortcut that prunes images, containers, and networks. Volumes are not pruned by default, and you must specify the --volumes
flag for docker system prune
to prune volumes.
$ docker system prune
WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all dangling images
- all build cache
Are you sure you want to continue? [y/N] y
To also prune volumes, add the --volumes
flag:
$ docker system prune --volumes
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 dangling images
- all build cache
Are you sure you want to continue? [y/N] y
By default, you are prompted to continue. To bypass the prompt, use the -f
or --force
flag.