コンテナの過負荷により Docker がクラッシュしました。どうすれば削除できますか?

コンテナの過負荷により Docker がクラッシュしました。どうすれば削除できますか?

私の物語

昔々私は電話していたドッカーPHP Laravel キューから何千ものメディア ファイルを処理します。私のコードは、完了したいタスクごとに新しいコンテナーを作成します (例: 「プロセス」、「検索」、「スライス」など)。その後、就寝すると災難が起こりました。目覚めると、1 TB のログ ファイルと、さまざまな状態の数十万のコンテナーがありました。

Docker はもう動作しません。つまり、入力してもdocker version(あるいは入力しても) そこに留まってじっとしているだけです。Dockerが非常に落ち込んでいるため、docker anything標準でコンテナーを削除できません。docker rm $(docker ps -a -q)

現在デーモンを呼び出す方法に関する関連情報は次のとおりです。

$> sudo docker daemon
INFO[0000] API listen on /var/run/docker.sock
INFO[0000] [graphdriver] using prior storage driver "aufs"

(Meanwhile in another terminal)
$> docker version
(insert infinite darkness here)

私の質問

  1. docker デーモンが応答しない場合、docker コンテナを削除するにはどうすればよいですか?

  2. 私は Docker を、API を使用してコードから呼び出される、強化された実行可能ファイルとして使用しています。将来的にコード自体をクリーンアップするには、どのような追加手順を実行する必要がありますか?

答え1

まあ、ちょっと調べてみました。

docker デーモンが応答しない場合、docker コンテナを削除するにはどうすればよいですか?

Ubuntu では、コンテナはディレクトリに保存されます/var/lib/docker/containers。そのディレクトリの内容を削除すると、状況はさらに改善されます。

また、興味のある人のために言っておくと、削除する必要があったコンテナは約25万個ありました。私が使用しなければならなかったファイルの数を考えるとls /var/lib/docker/containers | xargs -n200 rm -rf

私は Docker を、API を使用してコードから呼び出される、強化された実行可能ファイルとして使用しています。将来的にコード自体をクリーンアップするには、どのような追加手順を実行する必要がありますか?

コンテナを再度使用しない場合は、作業が完了したら正式に「削除」する必要があります。コマンドラインでは、これを使用して実行されdocker rm $(containername)、コードでは、docker へのアクセス方法によって完全に異なります。

関連情報