The container runtime (Docker, containerd, or cri-o) is not running on your node, preventing kubelet from starting Pods.
Fixes container runtime is not running
which docker
which containerd
which cri-o
# Check kubelet config to see which is expected
cat /etc/kubernetes/kubelet.conf | grep -i "container-runtime"which dockerwhich containerdwhich cri-o# Check kubelet config to see which is expectedcat /etc/kubernetes/kubelet.conf | grep -i "container-runtime"container runtime is not running
Kubernetes relies on a container runtime to manage container lifecycle. Without a running container runtime, kubelet cannot create, start, or manage Pods. This error typically appears during node setup or when the runtime crashes.
List installed runtimes:
which docker
which containerd
which cri-o
# Check kubelet config to see which is expected
cat /etc/kubernetes/kubelet.conf | grep -i "container-runtime"Check and restart the runtime:
sudo systemctl status docker # or containerd/cri-o
sudo systemctl start docker
sudo systemctl enable dockerVerify the runtime socket is accessible:
# For Docker
sudo docker ps
# For containerd
sudo ctr containers list
# For cri-o
sudo podman psFor containerd (recommended for kubeadm):
sudo apt-get update
sudo apt-get install -y containerd.io
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
sudo systemctl restart containerdAfter runtime is ready:
sudo systemctl restart kubelet
kubectl get nodes
# Wait for NotReady -> Ready transition
kubectl get nodes -wKubeadm officially supports containerd, cri-o, and Docker (deprecated in newer versions). Use containerd for new clusters. Ensure the kubelet socket path matches the runtime socket: /var/run/containerd/containerd.sock (containerd) or /var/run/crio/crio.sock (cri-o). Monitor runtime resource usage—if running out of disk or memory, the runtime may crash.