Docker 修剪陷入“修剪操作已在运行”

问题描述 投票:0回答:8

我昨天运行命令

docker system prune
,花了一些时间,然后我的 SSH 会话由于不同原因断开了连接。

不幸的是我现在得到了:

Error response from daemon: a prune operation is already running
.

显然有一个锁定和修剪命令不再运行。

有人知道如何在不停止并移除所有容器的情况下解除锁定吗?

编辑:在仓库中创建了一个问题:https://github.com/moby/moby/issues/36447

docker docker-swarm
8个回答
19
投票

重新启动docker对我有用。


12
投票

当容器不响应 docker 时,似乎会出现此问题。

这是我修复它的方法:

  1. 首先,使用以下命令查找无响应的容器:
    sudo docker inspect %CONTAINER ID%
  2. 如果容器没有响应,
    inspect
    命令将不会返回任何内容。
  3. 一旦发现
    %CONTAINER ID%
    没有响应,请使用以下命令查找其对应的 pid:
    ps -aux | grep %CONTAINER ID%
  4. 应该有一条线看起来像:

root     14931  0.0  0.0   7648   428 ?        Sl   Sep13   0:26 docker-containerd-shim -namespace moby -workdir /var/lib/docker/containerd/daemon/io.containerd.runtime.v1.linux/moby/3b0d4cba3f63a71fda99c76f3f777a156056e559fb034da4ed59c0aa340e5669 -address /var/run/docker/containerd/docker-containerd.sock -containerd-binary /usr/bin/docker-containerd -runtime-root /var/run/docker/runtime-runc

  1. 然后,使用
    kill -9 %PID%
  2. 终止此服务

提示 1:可能有一个或多个容器没有响应

提示2:为了避免停机,您可以对没有响应的容器对应的服务进行扩容,并显示

docker service scale ...

(我的答案补充了 dparkar 的答案。)


5
投票

就我而言,它并没有被卡住,只是花了很长时间才能完成。完成后删除了 3500 张图像!


1
投票

来自 github 问题的工作解决方案:

doublemcz 于 3 月 14 日发表评论

我可以确认修剪是由于容器无响应而卡住的。当我首先杀死容器时

kill -9 PROCESS_ID
我从哪里获得进程 ID
ps aux | grep docker-containerd-shim -namespace moby -workdir /var/lib/docker/containerd/daemon/io.containerd.runtime.v1.linux/moby/CONTAINER_ID

问题是你需要知道有一个容器在 docker 上没有响应:-/容器工作(即 node.js 工作正常),但只是 docker 无法检查它。

顺便说一句,这个容器甚至不应该存在,因为我们使用 :latest 镜像运行 docker service update...。 Docker 创建了另一个容器,但它没有被杀死。所以有两个正在运行的容器有两个不同的版本。


0
投票

就我而言,这些步骤很有帮助(我有数百个容器,所以我无法识别坏容器)。
我正在使用 minikube。

  1. 确保所有内容都在部署/副本集中运行。
  2. systemctl restart docker
    (这个命令对我来说永远运行)
  3. 现在可以通过
    ps auxf
    识别悬空进程。所有其他容器均已停止。
  4. 通过
    kill -9 <PID>
  5. 杀死他们
  6. 现在重新运行
    systemctl restart docker
    。现在应该可以正常工作了。
  7. Kubernetes 将正确恢复所有 Pod。只需给它一些时间(它会多次重启 Pod)

0
投票

解决此问题的简单方法 问题:

答案:重启docker服务

完成:


0
投票

重启docker服务。这对我有用。

sudo systemctl restart docker.service


0
投票

这个帖子已经很旧了,但也许这个信息对某些人来说仍然有用。 我有一些“损坏”的图像,我无法使用任何建议的方法删除这些图像,所以我必须执行以下操作:

docker rmi -f $(docker images -aq)

删除所有非活动图像 之后重新启动 docker 和 prune 再次开始工作

© www.soinside.com 2019 - 2024. All rights reserved.