Docker 错误 - 无法移除容器

Docker error - cannot remove a container

我最近没有升级 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]

根据 Plesk 站点,a solution would be

  1. 停止容器
  2. 重启服务器
  3. 删除容器

或者,如果你是运行代理规则,你必须先删除它们:

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

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

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

这是 docker 正在处理的 known issue。我建议升级到更新的内核(相当于 7.4 centos 是一个很大的改进)并迁移到 overlay2。一旦 18.03 版本发布,我建议升级,因为 docker 方面的一些修复将包含在那里。

当删除容器导致此问题时,您可以尝试强制选项(docker rm -f),该选项通常仍会报告错误,但最终会在几秒钟后删除容器。您可能会有一些遗留的碎片最好通过重新启动来清理,但它可能有助于解决文件系统锁定问题导致的任何其他问题。

我看到在 RH 和 CentOS 系统上改进 docker 的另一件事是创建一个文件:

$ cat /etc/systemd/system/docker.service.d/override.conf
[Service]
MountFlags=slave

这应该是当前版本 docker 中的默认设置,但您可能从没有它的旧版本复制了您的单元文件。要应用该文件,您需要 systemctl daemon-reload && systemctl restart docker 作为 root。

尝试删除包含 sub-catalogs.

路径太长的目录

例如

docker rm -f <container_name>

它给出如下错误:

Error response from daemon: driver "overlay" failed to remove root filesystem for aa867db5afb0b70c5680f3265cf6dd4d02816190e23123d8c97f1e7b502fc928: lstat /dockerimgs/docker/overlay/429a98b6053371c82902a2ad845b069037f2403b87c5632ad952ec2879/upper/opt/catalog1/catalog2/catalog3/.../.../.../catalogN ... file name too long

因此,停止该容器后,只需转到您的容器用作其文件系统的目录 (/dockerimgs/docker/overlay/429a98b6053371c82902a2ad845b069037f2403b87c5632ad952ec2879/...) 并删除出现在“docker rm".