昨日、コマンドdocker system Prune
を実行しましたが、時間がかかり、SSHセッションは別の理由で切断されました。
残念ながら、私は今得ています:
Error response from daemon: a Prune operation is already running
。
明らかにロックがあり、Pruneコマンドはもう実行されていません。
すべてのコンテナを停止および削除せずにロックを削除する方法を知っている人はいますか?
編集:リポジトリに問題を作成しました: https://github.com/moby/moby/issues/36447
この問題は、コンテナがdockerに応答しない場合に発生するようです。
修正方法は次のとおりです。
Sudo docker inspect %CONTAINER ID%
で応答しないコンテナを見つけますinspect
コマンドは何も返しません。%CONTAINER ID%
の1つは、ps -aux | grep %CONTAINER ID%
で対応するpidを見つけます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
kill -9 %PID%
でこのサービスを強制終了しますヒント1:応答しないコンテナが1つまたは複数存在する可能性があります
ヒント2:ダウンタイムを回避するために、docker service scale ...
で応答しないコンテナに対応するサービスをスケールアップできます。
(私の答えはdparkarを補完します。)
Dockerを再起動するとうまくいきました。
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つの実行中のコンテナがありました。