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
- 停止容器
- 重启服务器
- 删除容器
或者,如果你是运行代理规则,你必须先删除它们:
- 删除代理规则,停止容器,删除容器 -> 错误
- 停止容器,删除代理规则,删除容器 -> 工作
在 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
".
我最近没有升级 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
- 停止容器
- 重启服务器
- 删除容器
或者,如果你是运行代理规则,你必须先删除它们:
- 删除代理规则,停止容器,删除容器 -> 错误
- 停止容器,删除代理规则,删除容器 -> 工作
在 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
".