【问题标题】:Docker prune stuck in "a prune operation is already running"Docker prune 卡在“修剪操作已在运行”
【发布时间】:2022-01-25 14:22:24
【问题描述】:

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

不幸的是我现在得到了:

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

显然有一个 lock 和 prune 命令不再运行。

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

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

【问题讨论】:

  • 听起来更像是一个应该向项目所有者 IMVHO 报告的错误。

标签: docker docker-swarm


【解决方案1】:

重新启动 docker 对我有用。

【讨论】:

    【解决方案2】:

    当容器不响应 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 的回答。)

    【讨论】:

    • 使用docker rm -f %CONTAINER ID% 删除无响应的容器对我来说效果很好,而不会终止进程。
    【解决方案3】:

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

    【讨论】:

    • 我遇到了同样的问题 - 您可以在单独的终端会话中运行 docker system info 以检查容器/图像的数量是否下降。
    【解决方案4】:

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

    doublemcz 于 3 月 14 日发表评论

    我可以确认 prune 卡住是因为容器没有响应。当我首先杀死容器时 kill -9 PROCESS_ID 我从 ps 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 创建了另一个容器,但没有被杀死。所以有两个运行的容器有两个不同的版本。

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

        【解决方案6】:

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

        答案:service docker restart

        完成:

        【讨论】:

          猜你喜欢
          • 2022-10-15
          • 1970-01-01
          • 1970-01-01
          • 2021-03-10
          • 2017-07-05
          • 2021-08-08
          • 2023-03-27
          • 1970-01-01
          • 2023-02-16
          相关资源
          最近更新 更多