Introduction

Your Docker build or image pull fails because the storage device is full. Docker stores images, containers, and volumes in /var/lib/docker (by default), and when this location runs out of space, all Docker operations fail. This commonly happens after building many images, running many containers, or accumulating orphaned resources.

Symptoms

```bash $ docker build -t my-app . ERRO[0012] failed to copy files: write /var/lib/docker/tmp/docker-builder123/build.tar: no space left on device

$ docker pull nginx failed to register layer: Error processing tar file(exit status 1): write /var/lib/docker/overlay2/.../root: no space left on device

$ docker run my-app docker: Error response from daemon: failed to create shim: OCI runtime create failed: no space left on device.

$ df -h /var/lib/docker Filesystem Size Used Avail Use% Mounted on /dev/sda1 100G 95G 0G 100% / ```

Common Causes

  1. 1.Accumulated images: Old images not being cleaned up
  2. 2.Dangling images: Untagged images taking up space
  3. 3.Stopped containers: Exited containers still consuming space
  4. 4.Unused volumes: Orphaned volumes not deleted
  5. 5.Build cache: Docker build cache growing large
  6. 6.Log files: Container logs filling up disk
  7. 7.Overlay2 driver: Storage driver overhead
  8. 8.Small disk partition: Docker partition too small

Step-by-Step Fix

Step 1: Check Disk Usage

First, identify what's consuming space:

```bash # Check overall disk usage df -h

# Check Docker disk usage summary docker system df

# Output example: TYPE TOTAL ACTIVE SIZE RECLAIMABLE Images 45 12 28.5GB 20.3GB (71%) Containers 8 3 1.2GB 800MB (66%) Local Volumes 15 5 5.8GB 4.2GB (72%) Build Cache 150 0 12.3GB 12.3GB (100%)

# Detailed breakdown docker system df -v

# Check /var/lib/docker size sudo du -sh /var/lib/docker sudo du -sh /var/lib/docker/* ```

Step 2: Quick Cleanup - Remove Unused Resources

Free up space quickly:

```bash # Remove all unused resources (images, containers, volumes, networks, build cache) docker system prune -a --volumes

# Warning: This removes everything not currently in use! # Type 'y' to confirm

# Less aggressive - only dangling resources docker system prune

# Remove only stopped containers docker container prune

# Remove only unused images docker image prune -a

# Remove only unused volumes docker volume prune

# Remove build cache docker builder prune ```

Step 3: Remove Specific Resources

Target specific items:

```bash # List all images docker images -a

# Remove specific image docker rmi <image-id>

# Remove multiple images docker rmi image1 image2 image3

# Force remove images (even if used by stopped containers) docker rmi -f <image-id>

# List all containers docker ps -a

# Remove specific container docker rm <container-id>

# Remove all stopped containers docker rm $(docker ps -a -q -f status=exited)

# List volumes docker volume ls

# Remove specific volume docker volume rm <volume-name>

# Find large files in Docker directory sudo find /var/lib/docker -type f -size +100M -exec ls -lh {} \; ```

Step 4: Clean Docker Build Cache

Build cache can grow very large:

```bash # Check build cache size docker system df -v | grep -A 20 "Build Cache"

# Remove all build cache docker builder prune -a

# Remove cache older than 24 hours docker builder prune --filter until=24h

# Remove cache for specific keep-storage docker builder prune --keep-storage 10GB ```

Step 5: Clean Container Logs

Container logs can fill disk space:

```bash # Check container log sizes sudo sh -c "du -h /var/lib/docker/containers/*/*-json.log | sort -hr | head -20"

# Truncate a specific log file sudo truncate -s 0 /var/lib/docker/containers/<container-id>/<container-id>-json.log

# Truncate all container logs sudo sh -c 'truncate -s 0 /var/lib/docker/containers/*/*-json.log'

# Configure log rotation for all containers # Create or edit /etc/docker/daemon.json sudo nano /etc/docker/daemon.json ```

Add log rotation configuration: ``json { "log-driver": "json-file", "log-opts": { "max-size": "10m", "max-file": "3" } }

Then restart Docker: ``bash sudo systemctl restart docker

Step 6: Move Docker Data Directory

If disk partition is too small, move Docker to larger partition:

```bash # Stop Docker sudo systemctl stop docker

# Check current Docker root docker info | grep "Docker Root Dir"

# Create new location sudo mkdir -p /mnt/larger-disk/docker

# Copy Docker data sudo rsync -aP /var/lib/docker/ /mnt/larger-disk/docker/

# Backup original sudo mv /var/lib/docker /var/lib/docker.bak

# Create symlink sudo ln -s /mnt/larger-disk/docker /var/lib/docker

# Or configure daemon.json sudo nano /etc/docker/daemon.json ```

Add data directory: ``json { "data-root": "/mnt/larger-disk/docker" }

```bash # Restart Docker sudo systemctl start docker

# Verify new location docker info | grep "Docker Root Dir" ```

Step 7: Use Overlay2 Storage Driver Efficiently

Ensure efficient storage driver:

```bash # Check current storage driver docker info | grep "Storage Driver"

# If using devicemapper, switch to overlay2 (more efficient) # Edit /etc/docker/daemon.json sudo nano /etc/docker/daemon.json ```

json
{
  "storage-driver": "overlay2"
}
bash
# WARNING: This requires clearing existing Docker data
sudo systemctl stop docker
sudo rm -rf /var/lib/docker
sudo systemctl start docker

Step 8: Automate Cleanup

Set up automatic cleanup:

```bash # Create a cron job for automatic cleanup sudo crontab -e

# Add daily cleanup at 2 AM 0 2 * * * docker system prune -f --filter until=24h

# Or create a cleanup script cat > /usr/local/bin/docker-cleanup.sh << 'EOF' #!/bin/bash # Remove stopped containers docker container prune -f

# Remove unused images docker image prune -a -f --filter until=24h

# Remove unused volumes docker volume prune -f

# Clean build cache docker builder prune -f --filter until=24h

# Truncate logs larger than 100MB find /var/lib/docker/containers -name "*-json.log" -size +100M -exec truncate -s 0 {} \; EOF

chmod +x /usr/local/bin/docker-cleanup.sh

# Add to cron echo "0 2 * * * /usr/local/bin/docker-cleanup.sh" | sudo crontab - ```

Verification

Confirm space is available and Docker works:

```bash # Check available space df -h /var/lib/docker

# Should show available space # Example: Use% should be below 90%

# Verify Docker disk usage docker system df

# Should show reclaimable space reduced

# Test build docker build -t test-image .

# Test pull docker pull hello-world

# Test run docker run hello-world ```

You should now have sufficient disk space and Docker operations should complete successfully.

  • [Fix docker build cache invalidated unnecessary layers Issue in Docker-Errors](docker-build-cache-invalidated-unnecessary-layers)
  • [Fix Docker Build Cache Invalidation Optimization Issue in Docker](docker-build-cache-invalidation-optimization)
  • [Fix docker build context slow large files Issue in Docker-Errors](docker-build-context-slow-large-files)
  • [Fix docker build multi stage copy from not found Issue in Docker-Errors](docker-build-multi-stage-copy-from-not-found)
  • [Fix docker buildkit export local tar layer missing Issue in Docker-Errors](docker-buildkit-export-local-tar-layer-missing)

<script type="application/ld+json"> { "@context": "https://schema.org", "@type": "TechArticle", "headline": "Docker Build Failed No Space Left", "description": "Solve Docker no space left errors with disk cleanup, image pruning, and storage management solutions", "url": "https://www.fixwikihub.com/fix-docker-build-no-space-left", "publisher": { "@type": "Organization", "name": "FixWikiHub", "url": "https://www.fixwikihub.com" }, "author": { "@type": "Person", "name": "FixWikiHub Editorial Team" }, "datePublished": "2025-11-19T18:33:49.249Z", "dateModified": "2025-11-19T18:33:49.249Z" } </script>