This error occurs when Docker cannot initialize the storage driver (graphdriver) used to manage container images and layers. It typically happens after kernel updates, when storage driver configuration conflicts exist, or when there are incompatible filesystem types.
The graphdriver (storage driver) is a core Docker component responsible for managing layered filesystem storage for images and containers. When Docker starts, it initializes the storage driver to read and write container layers to disk. This error appears when: - The configured storage driver is not supported by your kernel - Multiple conflicting storage driver directories exist in /var/lib/docker - A kernel update removed support for the previously-used storage driver (e.g., AUFS) - The underlying filesystem doesn't support the selected storage driver - Docker was upgraded and the old storage driver is deprecated or removed The most common scenario is after a kernel or Docker upgrade where the previously-used storage driver (like AUFS or devicemapper) is no longer available, and Docker cannot automatically switch to a compatible alternative.
First, examine the exact error message to understand which storage driver is failing:
# Check systemd journal for Docker daemon errors
sudo journalctl -u docker.service -n 50 --no-pager
# Or try starting dockerd directly to see the full error
sudo dockerd --debugLook for messages like:
- "prior storage driver aufs failed"
- "driver not supported"
- "/var/lib/docker contains several valid graphdrivers"
If you recently performed a system update, the kernel may have been upgraded but not yet loaded:
# Check if a reboot is required
ls /var/run/reboot-required 2>/dev/null && echo "Reboot required"
# Reboot the system
sudo rebootAfter rebooting, try starting Docker again:
sudo systemctl start docker
docker versionVerify which storage drivers your kernel supports:
# Check for overlay/overlay2 support
lsmod | grep overlay
modprobe overlay # Try loading the overlay module
# Check kernel config for storage driver support
grep -i overlay /boot/config-$(uname -r) 2>/dev/null || \
zcat /proc/config.gz 2>/dev/null | grep -i overlay
# Check for AUFS support (deprecated in newer kernels)
grep -i aufs /proc/filesystemsModern systems should use overlay2 as the default storage driver.
Check if multiple storage driver directories exist:
ls -la /var/lib/docker/If you see multiple directories like aufs, overlay2, devicemapper, Docker may be confused about which one to use.
The error message will often tell you which drivers were detected:
- "contains several valid graphdrivers: aufs, overlay2"
- "contains several valid graphdrivers: devicemapper, overlay2"
Explicitly set the storage driver to overlay2 (recommended for most systems):
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<EOF
{
"storage-driver": "overlay2"
}
EOF
# Restart Docker
sudo systemctl restart dockerNote: If you're on an older system without overlay2 support, you may need to use a different driver. Check Docker's storage driver documentation for compatibility.
Warning: This will delete all containers, images, and volumes. Back up important data first!
If you need to switch storage drivers and clean up old data:
# Stop Docker
sudo systemctl stop docker
# Remove the old storage driver directory (e.g., aufs)
sudo rm -rf /var/lib/docker/aufs
# Or if switching from devicemapper
sudo rm -rf /var/lib/docker/devicemapper
# Start Docker with the new driver
sudo systemctl start dockerAlternatively, to completely reset Docker:
sudo rm -rf /var/lib/docker/*
sudo systemctl start dockerIf you're using Docker Desktop and see this error, perform a factory reset:
1. Open Docker Desktop
2. Go to Settings (gear icon)
3. Navigate to Troubleshoot
4. Click Reset to factory defaults
This will clear all Docker data and reset the storage driver configuration.
Alternatively, from the error dialog, you may see a "reset docker to factory defaults" button - click it to resolve the conflict.
After applying fixes, verify Docker is functioning correctly:
# Check Docker daemon status
sudo systemctl status docker
# Verify the storage driver in use
docker info | grep "Storage Driver"
# Run a test container
docker run --rm hello-worldThe storage driver should now show "overlay2" (or your configured driver), and the test container should run successfully.
Storage Driver Deprecation Timeline:
- AUFS: Removed from Ubuntu kernels since 3.18; replaced by OverlayFS
- Devicemapper: Deprecated in Docker 18.09+, removed in newer versions
- Overlay (v1): Superseded by overlay2, not recommended
- Overlay2: Current recommended driver for most Linux distributions
ZFS and Btrfs Considerations:
If your Docker data directory is on ZFS or Btrfs, you should use the matching storage driver:
{
"storage-driver": "zfs"
}Overlay2 is not compatible with ZFS filesystems. Docker will fail with "backing file system is unsupported for this graph driver."
Graphdriver Plugin Deprecation:
Graphdriver plugins were an experimental feature removed in Docker v28.0. If you were using custom graphdriver plugins, you'll need to migrate to containerd snapshotters.
Kernel Module Issues in VMs:
In virtualized environments (Xen, VirtualBox, cloud VMs), the host kernel may not have the required modules. For Xen, you may need to enable pygrub and install a kernel inside the VM rather than using the host kernel.
Checking for Corrupted State:
If Docker keeps failing even after configuration changes, the internal state may be corrupted:
sudo ls -la /var/lib/docker/
sudo du -sh /var/lib/docker/*Look for unusually large or empty directories that shouldn't exist.
LXC Containers:
Running Docker inside LXC containers often requires specific kernel features. The overlay2 driver may fail if the container doesn't have the right privileges. Consider using fuse-overlayfs or running Docker in privileged mode.
unable to configure the Docker daemon with file /etc/docker/daemon.json
How to fix 'unable to configure the Docker daemon with file daemon.json' in Docker
docker: Error response from daemon: OCI runtime create failed: container_linux.go: starting container process caused: exec: "/docker-entrypoint.sh": stat /docker-entrypoint.sh: no such file or directory
How to fix 'exec: entrypoint.sh: no such file or directory' in Docker
image operating system "linux" cannot be used on this platform
How to fix 'image operating system linux cannot be used on this platform' in Docker
dockerfile parse error line 5: unknown instruction: RRUN
How to fix 'unknown instruction' Dockerfile parse error in Docker
manifest unknown: manifest unknown
How to fix 'manifest unknown' in Docker