How to solve "failed to mount: no such device" error with the docker daemon
Solution
The solution to this problem could be as simple as rebooting your system.
The problem is caused mostly when the kernel updates itself during a system update. In my case, I was on Arch Linux when I ran the command sudo pacman -Syu
to start a system update.
Upon completing the update, an error came up on my screen when I tried to run docker
.
I used the following command to check the docker daemon logs - (Only works for systemd-based distros)
sudo journalctl -xeu docker.service
This was the output -
The first error message says - msg="failed to mount overlay: no such device" storage-driver=overlay2
Let us try to understand what overlay
is and what are Layers in the context of Docker containers.
Docker Layers
Containers were meant to be a better and more efficient alternative to VMs, the preferred solution for running applications in isolation. Individual VMs do not share any resources between them. Each VM has its own full-fledged operating system which creates its own file system. Even two VMs of the same operating system share nothing with each other. While this kind of setup also has its use cases, it's a waste of resources in our context. Containers solve this problem by sharing resources.
What is an image? It's a collection of filesystem layers and metadata. These layers are together run by Docker as a container. Containers are a running instance of an image. We can run multiple containers of the same image.
Docker implements a copy-on-write mechanism. Multiple containers share the same base system of the base image. The base directory of the image is read-only and all the changes are recorded in a different directory which is then layered on top of the base directory. The Overlay driver is used by Docker to implement it's layered file system. Layers can be shared across multiple running containers.
References :
Learn more about docker layers