Docker错误 - 无法删除容器

7

我最近没有升级Docker。以前我能够无误地删除容器。但现在每次都会出现以下错误:

docker rm -f 05344fa394a4

Error response from daemon: driver "overlay" failed to remove root filesystem for 
05344fa394a43e5080deb1a43fdeab3a6f141038069f1a49209e29ec8f06a20c: 
remove /var/lib/docker/overlay/c9eb21a91ae1a37a121855a1ef65a89593994dc036affa9ff295b59b4eca1af5/merged: 
device or resource busy

我基本上必须重新启动(systemctl restart docker无法解决问题)才能成功删除并继续。 有人能提供关于可能出错的原因的见解吗?
我正在Centos 7.3上以root身份运行Docker 17.06。 /var/lib/docker/var/lib/docker/overlay中的所有内容都由root:root拥有,保护为700。 [/var/lib/docker/network实际上是750]

我也遇到了这个问题,但我可以在重启后删除它。 - Shen Yudong
你是否使用过工具来确定哪个进程正在使用那个文件? - Dave Swersky
1
尝试使用 sudo lsof | grep <文件名> - Robert
1
你能试试这个 https://github.com/moby/moby/issues/34198,因为@thaJeztah提供了一个解决方案,而且是因为CentOS内核版本较低的原因。 - mohan08p
2
你好!在删除之前,你尝试过 docker stop 吗?docker stop 05344fa394a4。第二个问题是:docker ps -a 显示了什么? - karol
3个回答

2
这是一个与docker相关的已知问题,正在得到解决。建议升级到更新的内核(7.4版本的CentOS相当于有很大的改进),并迁移到overlay2。一旦18.03版本发布,建议升级,因为某些来自docker方面的修复将包含在其中。
当删除容器导致此问题时,您可以尝试使用force选项(docker rm -f),这通常仍然会报告错误,但最终会在几秒钟后删除容器。您可能会留下一些残留的部分,最好通过重新启动清理,但它可能有助于解决文件系统锁定问题引起的其他任何问题。
我看到另一个提高RH和CentOS系统上docker性能的方法是创建一个带有以下内容的文件:
$ cat /etc/systemd/system/docker.service.d/override.conf
[Service]
MountFlags=slave

现在在当前版本的Docker中,这应该是默认设置,但是您可能已经从旧版本复制了单元文件,而旧版本没有这个设置。要应用该文件,您需要以root身份运行systemctl daemon-reload && systemctl restart docker


1
根据Plesk网站,一种解决方法是
  1. 停止容器
  2. 重启服务器
  3. 删除容器

或者,如果您正在运行代理规则,则必须首先删除它们:

  1. 删除代理规则,停止容器,删除容器 -> 发生错误
  2. 停止容器,删除代理规则,删除容器 -> 正常工作

在a)的情况下,如果您已经删除了代理规则,则创建另一个容器并向新容器添加新的代理规则(相同的域名/子域)将允许您立即删除旧容器。

这似乎与在停止容器后修改nginx配置文件有关。


0

尝试移除包含过长子目录路径的目录。

例如:

docker rm -f <container_name>

它会给出以下错误:

来自守护程序的错误响应:驱动程序“overlay”无法删除根文件系统,用于 aa867db5afb0b70c5680f3265cf6dd4d02816190e23123d8c97f1e7b502fc928: lstat /dockerimgs/docker/overlay/429a98b6053371c82902a2ad845b069037f2403b87c5632ad952ec2879/upper/opt/catalog1/catalog2/catalog3/.../.../.../catalogN ... 文件名太长

因此,在停止容器后,只需转到目录,该目录用作其文件系统的容器(/dockerimgs/docker/overlay/429a98b6053371c82902a2ad845b069037f2403b87c5632ad952ec2879/...),并删除出现在“docker rm”上的错误消息中提到的目录。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接