Docker daemon startup failures on Linux are usually one of five things: disk space issues, permission problems, systemd conflicts, storage driver failures, or network configuration issues. The error messages are useless, but the fixes are straightforward once you know what to look for.
Quick Diagnosis - What's Actually Broken?
First, let's figure out what's actually happening:
## Check if Docker service is even trying to start
sudo systemctl status docker
## Look at the actual error messages (not Docker's helpful \"daemon not running\" bullshit)
sudo journalctl -u docker --since \"10 minutes ago\" -f
The journalctl
output tells you what's really wrong. Docker's client error messages are marketing-speak for "something's fucked, figure it out yourself."
Disk Space - The #1 Killer
Docker dies without warning when `/var/lib/docker` runs out of space. This happens constantly on VMs with small root partitions:
## Check available space where Docker stores its shit
df -h /var/lib/docker
## If that path doesn't exist, Docker's not even installed properly
ls -la /var/lib/docker
If you're under 1GB free, Docker won't start. The daemon needs space for:
- Container layer storage in
/var/lib/docker/overlay2/
- Image data and metadata
- Volume storage
- Build cache that grows forever
Quick fix for disk space:
## Nuclear option - removes everything
sudo docker system prune -af --volumes
## If daemon won't start to run that command:
sudo systemctl stop docker
sudo rm -rf /var/lib/docker/overlay2/*
sudo systemctl start docker
Warning: That rm -rf
destroys all your containers and images. Back up anything you need first.
Permission Hell
Docker's permission model is needlessly complicated. The daemon runs as root but needs to access various system resources:
## Check if docker group exists
getent group docker
## Verify daemon can access its socket location
ls -la /var/run/docker.sock
## Make sure systemd can find the service files
systemctl list-unit-files | grep docker
Common permission failures:
- `/var/run/docker.sock` owned by wrong user - shouldn't happen but does after system updates
- SELinux blocking Docker access - check with
sudo ausearch -m avc -ts recent | grep docker
- AppArmor conflicts - common on Ubuntu, check
sudo dmesg | grep apparmor | grep docker
Systemd Service Problems
Modern Linux distros use systemd to manage Docker, which adds another layer of things that can break:
## Check service file integrity
sudo systemctl cat docker.service
## Look for dependency failures
sudo systemctl list-dependencies docker.service
## Check if conflicting services are running
sudo netstat -tlnp | grep :2375
sudo netstat -tlnp | grep :2376
Common systemd issues:
- Unit file corruption after Docker updates - reinstall Docker
- Dependency cycles with container orchestration tools
- Socket activation conflicts between docker.socket and docker.service
Storage Driver Meltdown
Docker's storage drivers (overlay2, devicemapper, etc.) can fail in spectacular ways:
## Check what storage driver Docker is trying to use
sudo dockerd --debug --log-level=debug 2>&1 | grep -i storage
## Verify the storage driver is supported on your kernel
grep -i overlay /proc/filesystems
Storage driver problems:
- overlay2 not supported on older kernels (< 4.0)
- devicemapper running out of space in
/var/lib/docker/devicemapper/
- Corrupted storage metadata in
/var/lib/docker/image/
Platform-Specific Bullshit
Different Linux distros handle Docker differently because consistency is for losers:
- Docker installed via snap doesn't integrate with systemd properly
- UFW firewall can block Docker's networking setup
- apt repository keys expire and break updates
CentOS/RHEL/Rocky:
- SELinux enforcing mode blocks Docker by default
- firewalld conflicts with Docker's iptables rules
- Podman installation conflicts with Docker
Fedora 42+ (2025 Iptables Hell):
- iptables-nft package breaks Docker after system updates
- Fix:
sudo dnf install -y iptables-legacy
then reboot - Alternative:
sudo ln -s /usr/sbin/iptables-nft /usr/sbin/iptables
if you can't install legacy - Error message:
\"failed to register bridge driver: failed to create NAT chain DOCKER\"
Arch Linux:
- Manual service activation required:
sudo systemctl enable docker
- AUR Docker packages can conflict with official ones
- Rolling release breaks things randomly
WSL2 (Not real Linux but people use it):
- systemd not available by default (requires WSL2 update)
- Docker Desktop vs Docker Engine permission conflicts
- Windows filesystem performance kills Docker
The reality is that Docker daemon startup failures are usually environmental - something about your specific system configuration that Docker's generic error messages can't diagnose. The logs tell the real story.
Now that you understand the root causes, let's walk through the systematic approach to actually fixing these problems. Don't skip steps - even experienced engineers miss obvious shit when they're in firefighting mode.