Docker daemon连接containerd超时无法停止容器,求正确停止方法
正确停止Docker Daemon的方法
看起来你碰到了Docker daemon和containerd之间的通信超时问题,这时候直接用docker kill或者docker stop操作容器肯定行不通——因为命令根本没法和daemon正常建立通信。别慌,咱们直接从daemon本身入手,下面是不同操作系统环境下正确停止Docker daemon的方法:
Linux 系统(Systemd 发行版,比如 Ubuntu、CentOS、Debian 等)
这是目前大部分主流Linux发行版的情况,用systemctl直接管理服务:
- 常规停止方法:
输入以下命令,这会优雅地停止Docker daemon以及关联的containerd进程:sudo systemctl stop docker - 如果常规停止失效,强制杀死进程:
如果systemctl命令没反应,就直接找到Docker和containerd的进程并强制终止:- 先列出相关进程:
ps aux | grep -E 'docker|containerd' - 然后逐个杀死进程(把
<进程ID>替换成你查到的实际ID):
或者批量杀死所有相关进程:sudo kill -9 <进程ID>sudo pkill -9 docker containerd
- 先列出相关进程:
Linux 系统(非Systemd 发行版,比如 Alpine、OpenRC 等)
这类系统用对应的服务管理工具,比如OpenRC环境下:
sudo rc-service docker stop
macOS
直接通过Docker Desktop图形界面操作最省心:
点击顶部菜单栏的Docker图标,选择Quit Docker Desktop,这会完全停止Docker daemon和所有相关服务。
Windows
同样通过Docker Desktop操作:
要么点击应用右上角的设置图标选择Quit Docker Desktop,要么在任务栏右键点击Docker图标,选择Exit即可。
小提示
等Docker daemon重启后,你可以用docker ps -a查看容器状态,之后就能正常清理或重启容器了。如果这类通信超时问题频繁出现,建议检查Docker和containerd的版本是否兼容,或者通过journalctl -u docker查看系统日志排查根本原因。
内容的提问来源于stack exchange,提问作者shriyash Lakhe




