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

时间:2018-02-28 08:24:34

标签: docker docker-swarm

我昨天运行命令docker system prune,花了一些时间,然后我的SSH会话因不同原因而断开连接。

不幸的是我现在要来了:

Error response from daemon: a prune operation is already running

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

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

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

5 个答案:

答案 0 :(得分:3)

当容器对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%终止该服务

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

提示2:为了避免停机,您可以按比例放大与未响应docker service scale ...的容器相对应的服务。

(我的回答是对dparkar的补充。)

答案 1 :(得分:2)

重新启动docker对我有用。

答案 2 :(得分:0)

来自github问题的解决方案:

doublemcz于3月14日发表评论

我可以确认修剪是因为没有响应的容器而卡住的。当我先杀了那个容器 kill -9 PROCESS_IDps aux | grep docker-containerd-shim -namespace moby -workdir /var/lib/docker/containerd/daemon/io.containerd.runtime.v1.linux/moby/CONTAINER_ID那里获得的处理ID

问题是,您需要知道有一个容器在docker上没有响应:-/容器可以工作(即,node.js可以正常工作),但只有docker甚至无法对其进行检查。

此容器甚至都不应该在那里,因为我们使用:latest映像运行docker service update...。 Docker创建了另一个容器,但并未被杀死。因此,有两个具有两个不同版本的正在运行的容器。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

对于我来说,这些步骤很有帮助(我有数百个容器,因此我无法识别出不良容器)。
我正在使用minikube。

  1. 确保所有内容都在部署/复制案例中运行。
  2. systemctl restart docker(此命令永远为我运行)
  3. 现在可以通过ps auxf识别悬空过程了。所有其他容器均已停止。
  4. 通过kill -9 <PID>杀死他们
  5. 现在重新运行systemctl restart docker。现在应该可以正常工作了。
  6. Kubernetes将正确带回所有吊舱。给它一些时间(它将多次重启Pod)