Docker 1.24进程僵死杀不死完整处理流程
·
Docker 进程僵死杀不死完整处理流程
现象:
systemctl stop docker卡住,kill‑9杀完又自动起来,是 docker.socket 套接字自动拉起 dockerd 进程,所以杀完又复活。 你目标:彻底干掉 docker26,卸载,装 docker‑19.03 给 k8s1.18 使用。
步骤 1:同时关闭 docker.service 和 docker.socket(关键点!只停 docker 没用)
bash
#停止服务+套接字单元,socket会自动重启dockerd,必须一起关
systemctl stop docker.service docker.socket
systemctl disable docker.service docker.socket
#重置systemd失败计数
systemctl reset-failed docker
systemctl daemon-reload
步骤 2:强制杀死所有 docker 相关进程
bash
#查找dockerd、containerd全部进程
ps -ef | grep -E "dockerd|containerd"
#批量强制杀掉所有docker家族进程
pkill -9 dockerd
pkill -9 containerd
pkill -9 containerd-shim
⚠️ 如果进程状态是 D(不可中断睡眠,磁盘 IO 阻塞),
kill‑9也杀不掉,这种情况只能服务器重启才能释放进程。
校验:执行完,再次ps -ef | grep dockerd,不出现 dockerd 进程才算成功。
步骤 3:删除 socket 锁文件、数据目录,解除文件锁
bash
rm -rf /var/run/docker.sock
rm -rf /var/run/docker.pid
rm -rf /etc/docker
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
步骤 4:强制卸载 docker 包(如果 yum remove 卡住,跳过预卸载脚本)
先看已经安装哪些 docker 包
bash
yum list installed | grep docker
普通卸载
bash
yum remove -y docker-ce docker-ce-cli containerd.io docker-ce-rootless-extras
如果卸载卡死、preun 脚本挂住,强制卸载跳过脚本(对付僵死进程场景)51CTO...
bash
rpm -e --nodeps --noscripts docker-ce
rpm -e --nodeps --noscripts docker-ce-cli
rpm -e --nodeps --noscripts containerd.io
执行完,docker --version 提示 command not found,代表卸载干净。
两种结局
- ✅上面操作之后 docker 彻底消失 → 直接安装 docker‑19.03.15
bash
yum install -y yum-utils
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y docker-ce-19.03.15 docker-ce-cli-19.03.15 containerd.io
#配置镜像加速器
mkdir -p /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
EOF
systemctl enable --now docker
docker --version
- ❗执行完全部命令,ps 依旧看到 dockerd 进程(D 状态 IO 僵死)
内核层面卡住,任何 kill 无效,只能执行机器重启
reboot,重启后 docker 不会再起来,再执行安装 docker‑19.03。
重要提醒:CentOS7.9 + K8s1.18 绝对不能使用 docker24+,内置 dockershim 已经移除,你之前 CRI 报错根源就在这里。
重装 docker‑19.03 完成之后再做
- 确认
/etc/hosts里面写好 masterIP 和主机名 k8s‑master01 - 执行全套 kubeadm 残留清理
bash
kubeadm reset -f
rm -rf /etc/cni/net.d/*
rm -rf $HOME/.kube
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
ipvsadm --clear
- 使用 v1beta2 的 yaml 执行
kubeadm init
如果你做完还是有问题,可以把下面命令输出贴给我:
bash
ps -ef | grep dockerd
systemctl status docker
补充备选思路:不想折腾 docker 版本,你也可以放弃 docker,直接用 containerd 作为 k8s1.18 的 CRI 运行时,避开 docker 版本坑。如果你想我可以给你一套 centos7.9 containerd 部署 k8s1.18 的操作。
更多推荐

所有评论(0)