# Docker Storage Driver Failed: Troubleshooting and Resolution
Docker's storage driver manages how images and containers are stored on disk. When the storage driver fails, Docker won't start, containers won't run, or you'll see mysterious errors about layers and mounts. Understanding storage drivers is essential for debugging these issues.
Common error messages:
failed to start daemon: error initializing graphdriver: driver 'overlay2' failed to initializeError loading docker daemon: Failed to initialize storage driver overlay2failed to register layer: error creating overlay mount: too many levels of symbolic linksdevicemapper: Error running deviceCreateUnderstanding Storage Drivers
Docker supports several storage drivers, each with different characteristics:
| Driver | Requirements | Performance | Use Case |
|---|---|---|---|
| overlay2 | ext4 or xfs (ftype=1) | Best | Modern Linux, recommended |
| devicemapper | direct-lvm | Good | Older systems, RHEL 7 |
| btrfs | btrfs filesystem | Good | Specific setups |
| zfs | zfs filesystem | Good | Specific setups |
| vfs | None | Poor | Testing only |
Check your current driver:
docker info | grep "Storage Driver"Diagnosis Steps
Check Current Storage Driver
docker info -f '{{.DockerRootDir}}'
docker info | grep -E "Storage Driver|Backing Filesystem"Check Filesystem Type
```bash df -T /var/lib/docker # Output: Filesystem Type # /dev/sda1 ext4
# For overlay2 on XFS, check ftype xfs_info /var/lib/docker 2>/dev/null || echo "Not XFS" ```
Check Daemon Logs
sudo journalctl -u docker.service --no-pager -n 100 | grep -i "storage\|driver\|overlay"
sudo dockerd --debug 2>&1 | head -50Check Disk Space and Health
```bash df -h /var/lib/docker # Must have space available
# Check for disk errors dmesg | grep -i error ```
Common Causes and Fixes
Cause 1: Overlay2 on Unsupported Filesystem
Overlay2 requires ext4 or xfs with ftype=1.
Symptoms:
``
failed to initialize storage driver overlay2: backing filesystem doesn't support overlay
Diagnosis: ```bash df -T /var/lib/docker # If shows nfs, ntfs, or other unsupported filesystem
# Check XFS ftype xfs_info /path/to/docker # Look for ftype=1 in output # If ftype=0, overlay2 won't work ```
Fix 1: Use ext4 filesystem
```bash # Check current filesystem df -T /var/lib/docker
# If on unsupported filesystem, move Docker: sudo systemctl stop docker sudo mkdir -p /mnt/docker-ext4 # Format new partition with ext4 sudo mkfs.ext4 /dev/sdX sudo mount /dev/sdX /mnt/docker-ext4 sudo rsync -av /var/lib/docker/ /mnt/docker-ext4/ sudo mv /var/lib/docker /var/lib/docker.old sudo ln -s /mnt/docker-ext4 /var/lib/docker sudo systemctl start docker ```
Fix 2: Recreate XFS with ftype=1
sudo systemctl stop docker
sudo mkfs.xfs -f -n ftype=1 /dev/sdX
sudo mount /dev/sdX /var/lib/docker
sudo systemctl start dockerFix 3: Change storage driver
// /etc/docker/daemon.json
{
"storage-driver": "vfs"
}sudo systemctl restart dockerVFS is slow but works anywhere. Not recommended for production.
Cause 2: XFS ftype=0 Issue
On RHEL/CentOS 7, XFS default is ftype=0, which doesn't support overlay2.
Symptoms:
``
failed to initialize graphdriver: driver overlay2 not supported
Fix 1: Check current XFS settings
xfs_info /
# Output includes: naming =ftype=0 (problem)Fix 2: Use separate XFS partition with ftype=1
sudo systemctl stop docker
sudo mkfs.xfs -n ftype=1 /dev/sdX
sudo mount /dev/sdX /var/lib/docker
sudo systemctl start dockerFix 3: Use devicemapper instead
// /etc/docker/daemon.json
{
"storage-driver": "devicemapper",
"storage-opts": [
"dm.directlvm_device=/dev/sdX",
"dm.thinp_percent=95",
"dm.thinp_metapercent=1",
"dm.thinp_autoextend_threshold=80",
"dm.thinp_autoextend_percent=20"
]
}Cause 3: Devicemapper Loopback Issues
Devicemapper using loopback files (default) is slow and problematic.
Symptoms:
``
devicemapper: Error running deviceCreate
Transaction commit failed
Diagnosis:
``bash
docker info | grep -i "devicemapper|loopback"
ls -la /var/lib/docker/devicemapper/
Fix: Set up direct-lvm
- 1.Create a dedicated block device:
```bash # Create LVM physical volume sudo pvcreate /dev/sdX
# Create volume group sudo vgcreate docker /dev/sdX
# Create thin pool sudo lvcreate --thinpool docker --extents 95%VG docker sudo lvcreate --thinpool docker --extents 1%VG docker ```
- 1.Configure Docker:
// /etc/docker/daemon.json
{
"storage-driver": "devicemapper",
"storage-opts": [
"dm.directlvm_device=/dev/docker/docker",
"dm.thinp_percent=95",
"dm.thinp_metapercent=1",
"dm.thinp_autoextend_threshold=80",
"dm.thinp_autoextend_percent=20"
]
}sudo systemctl restart dockerCause 4: Overlay Mount Errors
Overlay mounts fail due to symbolic link levels or permission issues.
Symptoms:
``
error creating overlay mount: too many levels of symbolic links
failed to register layer: Error processing tar file
Fix 1: Clean up overlay directories
sudo systemctl stop docker
sudo rm -rf /var/lib/docker/overlay2/*
sudo systemctl start dockerFix 2: Check for symlink loops
find /var/lib/docker -type l -exec ls -la {} \; | grep circularFix 3: Rebuild Docker storage
sudo systemctl stop docker
sudo rm -rf /var/lib/docker/overlay2
sudo systemctl start dockerThis removes all images and containers—re-pull needed.
Cause 5: Insufficient Disk Space
Storage driver can't allocate space for layers.
Symptoms:
``
failed to create overlayfs: no space left on device
Fix: Free disk space
```bash # Check space df -h /var/lib/docker
# Clean Docker resources docker system prune -a
# Or move to larger disk sudo systemctl stop docker sudo rsync -av /var/lib/docker/ /mnt/larger-disk/docker/ sudo rm -rf /var/lib/docker # Update daemon.json with new data-root sudo systemctl start docker ```
Cause 6: Permissions on Docker Directory
Docker daemon can't access storage directories.
Symptoms:
``
permission denied: /var/lib/docker/overlay2
failed to initialize graphdriver: permission denied
Fix: Correct permissions
sudo chown -R root:root /var/lib/docker
sudo chmod -R 755 /var/lib/docker
sudo systemctl restart dockerCause 7: Kernel Missing Overlay Support
Older kernels lack overlay filesystem support.
Symptoms:
``
failed to initialize graphdriver: driver 'overlay2' not found
Diagnosis: ```bash # Check kernel modules lsmod | grep overlay modprobe overlay 2>&1
# Check kernel version uname -r # overlay2 requires kernel >= 3.18 ```
Fix 1: Load overlay module
sudo modprobe overlay
# Make permanent
echo overlay | sudo tee /etc/modules-load.d/overlay.conf
sudo systemctl restart dockerFix 2: Update kernel
```bash # Ubuntu/Debian sudo apt update sudo apt install linux-image-generic
# RHEL/CentOS sudo yum update kernel sudo reboot ```
Fix 3: Use alternative driver
// /etc/docker/daemon.json
{
"storage-driver": "devicemapper"
}Cause 8: Btrfs/ZFS Specific Issues
When using btrfs or zfs as storage driver.
Symptoms:
``
btrfs: Failed to create subvolume
zfs: Dataset creation failed
Fix 1: Check filesystem is mounted
mount | grep btrfs
mount | grep zfsFix 2: Create proper subvolume/dataset
```bash # For btrfs sudo btrfs subvolume create /var/lib/docker/btrfs
# For zfs sudo zfs create -o mountpoint=/var/lib/docker rpool/docker ```
Changing Storage Drivers
Preparing for Storage Driver Change
Changing storage drivers requires removing all data:
# Warning: This removes all images, containers, and volumes
sudo systemctl stop docker
sudo rm -rf /var/lib/dockerConfiguring New Driver
// /etc/docker/daemon.json
{
"storage-driver": "overlay2",
"data-root": "/var/lib/docker"
}sudo systemctl start docker
docker info | grep "Storage Driver"Validating the Change
```bash # Check new driver docker info
# Pull test image docker pull hello-world
# Create test container docker run --rm hello-world ```
Overlay2 Best Practices
Recommended Configuration
// /etc/docker/daemon.json
{
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.size=20G"
]
}This sets maximum container writable layer size to 20G.
Monitoring Overlay2 Health
```bash # Check overlay mounts mount | grep overlay
# Check overlay directories ls -la /var/lib/docker/overlay2
# Check for orphaned layers docker system df docker image prune -a ```
Verification Steps
After fixing storage driver issues:
- 1.Verify driver is correct:
- 2.```bash
- 3.docker info | grep "Storage Driver"
- 4.docker info | grep "Backing Filesystem"
- 5.
` - 6.Test basic operations:
- 7.```bash
- 8.docker pull nginx:alpine
- 9.docker run --rm nginx:alpine echo "Storage driver working"
- 10.docker rmi nginx:alpine
- 11.
` - 12.Check no errors in logs:
- 13.```bash
- 14.sudo journalctl -u docker.service --since "5 minutes ago"
- 15.
` - 16.Verify disk usage:
- 17.```bash
- 18.docker system df
- 19.df -h /var/lib/docker
- 20.
`
Storage driver failures are often about filesystem compatibility. Overlay2 is the modern standard, but it requires ext4 or XFS with ftype=1. If your filesystem doesn't support it, either change the filesystem or use an alternative storage driver like devicemapper with direct-lvm configuration.