古いDockerコンテナを削除する方法

この質問は、https://stackoverflow.com/questions/17014263/should-i-be-concerned-about-excess-non-running-docker-containers に関連しています。

古いコンテナを削除する方法について悩んでいます。docker rm 3e552code34aでは1つのコンテナを削除できますが、すでにたくさんあります。docker rm --helpでは、選択オプション(allとか、イメージ名でとか)が出てきません。

もしかしたら、これらのコンテナが保存されているディレクトリがあって、そこから手動で簡単に削除できるのでしょうか?

ソリューション

Docker 1.13.x]1以降は、Docker container pruneが使用できます。

docker container prune

これにより、停止しているすべてのコンテナが削除され、すべてのプラットフォームで同じように動作するはずです。

また、Docker system pruneというものもあります。

docker system prune

これは、使用されていないすべてのコンテナ、ネットワーク、イメージ(ぶら下がっているものと参照されていないものの両方)、そしてオプションでボリュームを、1つのコマンドでクリーンアップします。


古いDockerバージョンでは、Dockerコマンドと他のUnixコマンドを組み合わせて、必要なものを得ることができます。ここでは、数週間前の古いコンテナをクリーンアップする方法の例を紹介します。

$ docker ps --filter "status=exited" | grep 'weeks ago' | awk '{print $1}' | xargs --no-run-if-empty docker rm

この例は https://twitter.com/jpetazzo/status/347431091415703552 から引用しています。

解説 (21)

もう一つの方法は、Guillaume J. Charmes氏から教えてもらったものです(クレジットはこちら)。

docker rm `docker ps --no-trunc -aq`

は、エレガントな方法ですべてのコンテナを削除します。

Bartosz Bilicki氏によるWindows用のものです。

FOR /f "tokens=*" %i IN ('docker ps -a -q') DO docker rm %i

PowerShell用です。

docker rm @(docker ps -aq)

Docker 1.13 (Q4 2016)でのアップデート、クレジットはVonCこのスレッドの後半)です。

docker system pruneでは、使用されていないデータがすべて削除されます(つまり、停止しているコンテナ、コンテナのないボリューム、コンテナのないイメージの順に削除されます)。

PR 26108][3]およびcommit 86de7c0を参照してください。これらのコマンドは、Dockerデーモンのデータがディスク上でどのくらいの容量を占めているかを簡単に視覚化し、「不要な」余分なものを簡単にクリーンアップできるようにするために、いくつかの新しいコマンドを導入しています。

docker system prune

WARNING! This will remove:
    - all stopped containers
    - all volumes not used by at least one container
    - all images without at least one container associated to them
Are you sure you want to continue? [y/N] y

[3]: https://github.com/docker/docker/pull/26108

解説 (20)

まず、コンテナを削除する前に、実行中のコンテナを停止します。

実行中のコンテナを削除します。

docker rm $(docker stop -t=1 $(docker ps -q))

stopではなく、killを使うこともできます。私の場合はstop` を使います。なぜなら、毎回新しいコンテナを作るのではなく、再実行することが多いので、きれいにシャットダウンするようにしているからです。

注意:コンテナを停止しようとすると、エラーが発生します。

Error:Impossible to remove a running container, please stop it first

すべてのコンテナを削除する

docker rm $(docker ps -a -q)
解説 (0)