Docker Daemon Won't Start on Ubuntu 22.04
Docker daemon fails after a kernel update on Ubuntu 22.04. The dockerd can't bind to the socket. Fix is to check and reset the docker group and socket permissions.
You're running Ubuntu 22.04 LTS. You just did a kernel update, rebooted, and now systemctl start docker gives you nothing. Or maybe you see Failed to start Docker Application Container Engine in the logs. I know this error is infuriating. It happened to me last month after a apt upgrade pulled a new kernel. The daemon just refuses to bind to the socket.
Root Cause
Docker uses a socket file at /var/run/docker.sock to talk to the client. After a kernel update, the docker group's GID (group ID) can change if the system reorders groups. Or the socket file gets left in a bad state. The daemon then can't create the socket because it doesn't have permission to write to /var/run. Also, containerd sometimes starts before dockerd and grabs the socket—creating a conflict. But the real fix is simpler.
Step-by-Step Fix
- Stop all Docker services
Run this to make sure nothing is half-running:
sudo systemctl stop docker containerd - Remove the old socket file
The socket might be stale. Delete it:
sudo rm -f /var/run/docker.sock - Check the docker group
See if your user is in the docker group:
groups $USER
If not, add yourself:sudo usermod -aG docker $USER
Then log out and back in. This trips me up every time. - Restart Docker daemon
Start it clean:
sudo systemctl start docker
Check status:sudo systemctl status docker - Test with a simple command
Rundocker info. If it shows server info, you're good.
Still Fails? Check These
If step 4 throws an error like cannot connect to the Docker daemon, look at the logs:
sudo journalctl -u docker --no-pager
Look for lines with permission denied or bind: address already in use.
- Permission denied — Your
/var/rundirectory might have wrong ownership. Fix it:sudo chown root:root /var/run - Address already in use — Something else using port 2375 or 2376? Run
sudo ss -tlnp | grep 237to find the culprit. Kill it withsudo kill [PID]. - Containerd socket conflict — If containerd started first, stop it:
sudo systemctl stop containerd, then start docker again.
One more thing: if you're using a custom /etc/docker/daemon.json, check that file for typos. A bad JSON there will crash dockerd silently. Validate it with python3 -m json.tool /etc/docker/daemon.json.
Why this works — The socket file is the handshake between docker client and daemon. If it's stale or owned by wrong group, nothing works. Deleting it forces docker to recreate it fresh. Adding the group ensures your user can talk to it. I've fixed dozens of machines this way, and it's almost always the socket permissions.
If you still see the error after all that, check your kernel version. Ubuntu 22.04 with kernel 5.15 had a bug where cgroup v2 caused issues. Run uname -r. If it's 5.15.0-xx, you might need to enable cgroup v1 in boot parameters. But that's rare—socket permissions cover 9 out of 10 cases.
Was this solution helpful?