首页/云/Docker 容器速查/容器删不掉:Removal In Progress
容器排障52 条

容器删不掉:Removal In Progress

docker rm 卡住或提示 Removal In Progress / device busy:先 kill 再删,查挂载点占用;顽固情况重启 docker 让运行时清理状态。

Docker 容器速查云更新于 2026-10-13

容器为什么删不掉

docker rm 卡住或提示 Removal In Progress、device or resource busy,本质是 daemon 拆不掉容器的最后一层。常见原因分三类:容器还活着但进程无法被正常终止(处于不可中断状态),挂载点被占用(宿主目录还被别的进程引用,或远端存储无响应),以及 containerd 或 dockerd 的状态残留。前两类必须到宿主侧排查,第三类通常重启 docker 就能清掉。

基本信息

第一步docker rm -f <容器>,完整保留报错文本
看残留状态docker ps -a --filter status=removing --filter status=dead
查挂载占用grep <容器 ID 前缀> /proc/mounts
查残留进程ps -ef 过滤 containerd-shim 与 runc
兜底手段重启 docker,让 daemon 重建运行时状态
真实原因journalctl -u docker 看 daemon 侧日志
适用范围Linux 宿主;含 bind 挂载与远端存储的场景更常见

典型使用场景

  • 容器已经停止,docker rm 却长时间没有响应
  • 删除后 docker ps -a 里一直显示正在删除的状态
  • 挂了宿主目录或远端存储的容器删不掉,报 device or resource busy
  • 批量清理测试环境时被一两个顽固容器卡住整个脚本
  • 磁盘告警要紧急腾空间,却删不掉占着存储层的容器

排查与处理顺序

排查与处理顺序
docker rm -f web   # 先强删,完整记录报错文本
docker ps -a --filter status=removing --filter status=dead   # 看残留状态
grep -i <容器ID前缀> /proc/mounts | head -5   # 找占用该容器挂载点的条目
ps -ef | grep -E 'containerd-shim|runc' | grep -v grep   # 看残留的运行时进程
journalctl -u docker --since '10 min ago' | tail -30   # daemon 侧的真实原因
sudo systemctl restart docker   # 兜底:让 daemon 重建状态后重试删除

卡住原因对照

原因判断依据处理方向
运行时状态残留报错含 Removal In Progress,ps -a 显示正在删除重启 docker 后重试删除
挂载点被占用报 device or resource busy,/proc/mounts 仍有该路径找到占用进程结束它,再重试删除
远端存储无响应挂载点指向 NFS 或云盘,连 umount 也卡住先恢复存储侧可用性,再处理容器
进程处于不可中断状态ps 显示该进程状态为 D查内核与存储,等待 IO 恢复,重启未必有用
卷仍被使用报错提到 volume 或卷名确认使用方,再决定删卷还是保留
docker rm -f 发送的是 SIGKILL,对处于不可中断状态的进程无效,硬等不会成功。先确认进程卡在哪个设备或存储上,再决定是恢复存储还是重启服务。
处理完用 docker ps -a 与 daemon 的容器目录双向核对,确认条目真的消失。daemon 的元数据目录不要手工删除,容易让状态与实际不一致,清理交给 daemon 自己完成。
手动 umount 之前必须确认目标路径确实属于这个容器。宿主的共享挂载点或远端存储一旦被误卸载,影响面可能远超这一个容器,恢复还要重新挂载。

易错点

  • 手工删 /var/lib/docker 下的容器目录会让 daemon 的元数据与实际状态脱节,可能引出更多删不掉的残留。
  • umount 前没确认路径归属,误卸载宿主共享目录或远端存储,影响面可能很大,且需要重新挂载才能恢复。
  • 重启 docker 会连带重启所有容器(配置了 live-restore 的场景除外),生产上要按变更流程执行并评估影响。
  • 只删容器不删卷,匿名卷与命名卷会继续占用磁盘;需要清理时用 docker rm -v,并先确认卷不再被其它容器引用。
  • 进程处在不可中断状态时反复重试删除甚至重启 daemon,只会让 daemon 自己也卡在关闭流程里,应优先确认存储与内核侧状态。

数据来源与参考

  • Docker 官方文档:Troubleshooting 与 container removal(docs.docker.com)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌