web-dev-qa-db-ja.com

Docker Pruneが「Prune操作は既に実行中です」で止まっている

昨日、コマンドdocker system Pruneを実行しましたが、時間がかかり、SSHセッションは別の理由で切断されました。

残念ながら、私は今得ています:

Error response from daemon: a Prune operation is already running

明らかにロックがあり、Pruneコマンドはもう実行されていません。

すべてのコンテナを停止および削除せずにロックを削除する方法を知っている人はいますか?

編集:リポジトリに問題を作成しました: https://github.com/moby/moby/issues/36447

16
Martin Mika

この問題は、コンテナがdockerに応答しない場合に発生するようです。

修正方法は次のとおりです。

  1. まず、Sudo docker inspect %CONTAINER ID%で応答しないコンテナを見つけます
  2. コンテナが応答しない場合、inspectコマンドは何も返しません。
  3. 応答しない%CONTAINER ID%の1つは、ps -aux | grep %CONTAINER ID%で対応するpidを見つけます
  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:応答しないコンテナが1つまたは複数存在する可能性があります

ヒント2:ダウンタイムを回避するために、docker service scale ...で応答しないコンテナに対応するサービスをスケールアップできます。

(私の答えはdparkarを補完します。)

4
KDemeul

Dockerを再起動するとうまくいきました。

3
Bhavani

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は別のコンテナを作成しましたが、これは殺されませんでした。そのため、2つの異なるバージョンを持つ2つの実行中のコンテナがありました。

0
dparkar