centos Docker驱动程序“overlay 2”无法删除根文件系统:unlinkat -设备或资源忙碌

o2rvlv0m  于 2022-11-07  发布在  Docker
关注(0)|答案(2)|浏览(664)

当尝试删除一个Docker容器时(例如当尝试docker-compose down时),我总是得到这些错误:

ERROR: for <my_container>  container d8424f80ef124c2f3dd8f22a8fe8273f294e8e63954e7f318db93993458bac27: driver "overlay2" failed to remove root filesystem: unlinkat /var/lib/docker/overlay2/64311f2ee553a5d42291afa316db7aa392a29687ffa61971b4454a9be026b3c4/merged: device or resource busy

常见的建议,如重新启动docker服务,修剪或强制删除容器不工作。我发现唯一的工作是手动卸载与sudo umount /home/virtfs/xxxxx/var/lib/docker/overlay2/<container_id>/merged,然后我能够删除容器。
我的操作系统是CentOS Linux release 7.9.2009 (Core),内核版本是3.10.0-1127.19.1.el7.x86_64。我想这可能是由于overlay 2与CentOS冲突,但根据this page,我的CentOS/内核版本应该可以工作。如果能找到一个解决方案,那就太好了,因为我理想的情况是在docker-compose down之前不需要使用提升的特权来卸载。

7d7tgy0s

7d7tgy0s1#

从错误日志中可以观察到涉及到文件装载。执行以下命令查看相关进程
第一个
停止占用的进程
然后删除容器

kxe2p93d

kxe2p93d2#

通常,当没有进程被列为阻塞时,就会发生这种情况,那么您就知道是内核模块阻塞了它。
最有可能的罪魁祸首是nfs(不知道为什么要在docker中运行它),或者是docker中绑定挂载的文件,有时是自动挂载的文件,比如由systemd-networkd创建的文件。
Overlay 2被Ubuntu淘汰是有原因的。CentOS已经到了生命的尽头,所以这个问题可能已经在你最有可能的升级路径中解决了,到Rocky Linux。或者你可以进入迁移docker storage engine的丛林。
或者,如果可以的话,你也可以一开始就把这个软件包或者占据它的软件去掉,但是你必须分享更多关于它是什么的信息来帮助你。

相关问题