# Cleaning Up Docker with Prune

Docker is a widely used containerization platform for building, running, and distributing applications, but as you develop and deploy containers over time, it accumulates unused objects like stopped containers, dangling images, unused volumes, and networks. These leftover resources consume disk space and can degrade system performance if not cleaned up. This guide explains how to use the `docker prune` command family to safely remove unused Docker resources, covering the differences between `docker prune` and manual deletion, how to use each prune variant, and how to avoid accidental data loss during cleanup. By the end, you'll have a repeatable set of commands for keeping your Docker host's disk usage under control, following Docker resource cleanup practices documented in [**Vultr Docs**](https://docs.vultr.com/how-to-clean-up-docker-with-prune).

---

## What Is docker prune?

The `docker prune` command family removes unused Docker resources — stopped containers, dangling images, unused volumes, networks, and build cache — all in one go. It's faster and less manual than `docker rm` or `docker rmi`.

| Feature | `docker rm` / `rmi` | `docker prune` |
| --- | --- | --- |
| Removes one item at a time | Yes | No |
| Removes all unused resources at once | No | Yes |
| Requires specific names or IDs | Yes | No |
| Safer for manual deletions | Yes | No |
| Useful for quick cleanup | No | Yes |

Use `docker rm` when you need precision, and `docker prune` when you want to clean everything efficiently.

## Quick Reference

```console
docker system prune
docker container prune
docker image prune
docker volume prune
docker network prune
docker builder prune
```

## Common Options for docker prune

Most `docker prune` commands support the following options:

| Option | Description |
| --- | --- |
| `--force` | Skip confirmation prompts. Use carefully to avoid accidental deletions. |
| `--filter` | Filter resources by criteria such as age. Example: `--filter "until=24h"` removes items older than 24 hours. |
| `--all` | (For images) Remove all unused images, not just dangling ones. |

Use filters to avoid removing recently created resources during cleanup.

## Clean All Docker Resources with docker system prune

Removes all unused containers, networks, dangling images, and build cache. Syntax: `docker system prune [OPTIONS]`.

**1\. Clean up all unused Docker resources interactively:**

```console
docker system prune
```

**2\. Clean up all unused resources without confirmation:**

```console
docker system prune --force
```

**3\. Clean up unused resources older than 48 hours:**

```console
docker system prune --filter "until=48h"
```

**When to use:** after heavy development or container churn, when disk space is limited, or when no stopped containers or unused images are needed.

## Clean Docker Containers with docker container prune

Removes only stopped containers — running containers are not affected. Syntax: `docker container prune [OPTIONS]`.

**1\. Remove all stopped containers:**

```console
docker container prune
```

**2\. Remove all stopped containers without confirmation:**

```console
docker container prune --force
```

**3\. Remove stopped containers older than 24 hours:**

```console
docker container prune --filter "until=24h"
```

**When to use:** after running short-lived containers during testing or development, when stopped containers pile up over time, or to free up space without affecting running containers.

## Clean Docker Images with docker image prune

Removes unused Docker images. By default, it only removes dangling images — images that are untagged and not referenced by any containers. Syntax: `docker image prune [OPTIONS]`.

**1\. Remove all dangling images:**

```console
docker image prune
```

**2\. Remove all unused images (not just dangling ones):**

```console
docker image prune --all
```

**3\. Remove unused images older than 72 hours:**

```console
docker image prune --all --filter "until=72h"
```

**When to use:** after building or pulling many temporary images, when running out of disk space due to image layers, or to clean up old application builds not referenced by containers.

## Clean Docker Volumes with docker volume prune

Removes volumes that are not referenced by any containers. Active or attached volumes are not affected. Syntax: `docker volume prune [OPTIONS]`.

**1\. Remove all unused volumes interactively:**

```console
docker volume prune
```

**2\. Remove all unused volumes without confirmation:**

```console
docker volume prune --force
```

**When to use:** after deleting containers that previously used persistent volumes, when temporary or test volumes accumulate over time, or to recover disk space tied to orphaned data.

> **Warning:** Volume data is not recoverable after deletion. Always verify which volumes are in use before pruning.

## Clean Docker Networks with docker network prune

Removes Docker networks that are not connected to any running or stopped containers. Syntax: `docker network prune [OPTIONS]`.

**1\. Remove all unused networks interactively:**

```console
docker network prune
```

**2\. Remove all unused networks without confirmation:**

```console
docker network prune --force
```

**When to use:** after removing containers created with `docker-compose`, when testing multi-container applications, or to clean up orphaned or auto-generated bridge networks.

## Clean Docker Build Cache with docker builder prune

Removes the build cache created during image builds. By default, it only removes dangling (unused) cache layers. Syntax: `docker builder prune [OPTIONS]`.

**1\. Remove dangling build cache interactively:**

```console
docker builder prune
```

**2\. Remove all unused build cache without confirmation:**

```console
docker builder prune --all --force
```

**When to use:** after frequent image builds during development, when low on disk space, or to clean up intermediate cache layers that are no longer referenced.

## Troubleshooting Docker Prune Issues

### Docker Prune Doesn't Remove Everything

**Cause:** Docker only removes unused resources. If a container or volume is still referenced, it won't be pruned.

**Solution:**

**1\. Stop the container:**

```console
docker container stop <container_id>
```

**2\. Remove the container:**

```console
docker container rm <container_id>
```

**3\. Run prune again:**

```console
docker system prune
```

### Cannot Delete Volume Because It's In Use

**Cause:** The volume is still attached to a container.

**Solution:**

**1\. List all volumes:**

```console
docker volume ls
```

**2\. Inspect the volume to see where it's used:**

```console
docker volume inspect <volume_name>
```

**3\. Remove the attached container:**

```console
docker container rm <container_id>
```

**4\. Then prune volumes:**

```console
docker volume prune
```

### Docker Disk Usage Still High

**Cause:** Some resources are still referenced or were not covered by the last prune command.

**Solution:**

**1\. Check the disk usage summary:**

```console
docker system df
```

**2\. Run targeted prune commands:**

```console
docker image prune
```

```console
docker volume prune
```

**3\. Run a full cleanup (if safe to do so):**

```console
docker system prune --all
```

## Next Steps

- Schedule `docker system df` and a filtered `docker system prune --filter "until=24h"` as a recurring job instead of running cleanup manually.
- Standardize on `--filter "until=Xh"` across your team's cleanup scripts to avoid accidentally removing resources still in active use.
- Add a `docker volume ls` check to your deployment pipeline before pruning volumes, since volume data isn't recoverable.
- Review `docker builder prune --all` periodically on CI build hosts where cache layers accumulate quickly.

For the full guide with additional tips, visit the original article on [**Vultr Docs**](https://docs.vultr.com/how-to-clean-up-docker-with-prune).
