docker rm -f 报错 driver "overlay2" failed to remove root filesystem: unlinkat ... operation not permitted,1panel 面板里一直显示"移除中"。=
问题现象
-
执行
docker rm -f <容器ID>失败,报错类似:Error response from daemon: container ...: driver "overlay2" failed to remove root filesystem: unlinkat /var/lib/docker/overlay2/.../diff/.../license_info.json: operation not permitted -
容器状态可能显示为
Dead或Removal In Progress。 -
Web 管理面板(1panel)里一直转圈"移除中",点停止也没用。

-
ps aux | grep <容器ID>找不到占用进程。
原因分析
Docker 使用 overlay2 存储驱动时,容器的可写层位于 /var/lib/docker/overlay2/<id>/diff。如果容器内的某些文件被设置了 immutable(不可变)属性 ,Docker 在删除容器时就无法删除这些文件,从而报 operation not permitted。
哪些文件会被设置 immutable?常见于一些安全软件或授权管理程序,比如 AWVS 会把授权文件(如 wa_data.dat、license_info.json)锁定,防止被篡改。容器运行期间加锁,删除时 Docker 没有权限解锁,就卡住了。
解决步骤
1. 递归移除 diff 目录的不可变属性
bash
chattr -iR /var/lib/docker/overlay2/b6d79fab4681f181b48690e38b6b8b86870d62e13cf69dda60e9f686dcfc6198/diff
把路径替换成你实际获取到的 UpperDir。-R 表示递归,-i 表示移除 immutable 属性。
2. 再次强制删除容器
bash
docker rm -f bdd8f7a60908
这次应该就成功了。刷新 Web 面板,卡住的容器也会消失。
总结
- 问题根源 :容器内文件被
chattr +i锁定,Docker 删除时无权限。 - 核心命令 :
chattr -iR <diff目录>+docker rm -f <容器ID>。