Docker を使い続けてコンテナやイメージを放置していると差分だけとはいえ、 ディスクの消費が増えていって、 書き込みエラー: デバイスに空き領域がありません (ENOSPC, write error: No space left on device) というエラーになってしまいます。

2017-03-18 追記

最近のバージョンでは docker system prune を使うのが良いようです。

古いバージョンを使うときの参考として、以下の記述は古いまま残しておきます。

コンテナの削除

docker rm の Eamples にあるように

 docker rm `docker ps -a -q`

で停止しているコンテナを削除できます。

実行中のコンテナがあると削除できないというエラーが出ますが、 意図的にやっていることなので気にする必要はありません。

公式のドキュメントにも書いてある方法なので、 コンテナの削除方法はこのやり方で問題ないと思います。

イメージの削除

0.7.2 (2013-12-16) の変更点 に 「実行中以外であってもコンテナが依存しているイメージは削除できなくした」 (Prevent deletion of image if ANY container is depending on it even if the container is not running) と書いてあって、 今まではコンテナが停止していれば docker rmi でイメージが削除できていたのですが、 0.7.2 からはできなくなったので、 上記の手順でコンテナを先に削除しておく必要があります。

不要なイメージの削除は docker imagesREPOSITORY<none> になっているものを削除すれば良いので、

 docker rmi $(docker images | awk '/^<none>/ { print $3 }')

のようにすれば可能です。

Error: No such image: xxxxxxxxxxxx のようにエラーが出ることがありますが、 他のイメージを削除したときに一緒に削除されてしまっているだけで、 特に問題はないようです。

FIXME に書いてある方法なので、 現状はこの方法が無難だと思います。

FIXME に書いてあるということで、 将来的にはコンテナの削除の方も含めて、 もっと簡単なコマンドが用意される予定のようです。

その他のイメージの削除

docker rmi local/debian-ja:7.2 で特定の TAG のイメージを削除したり、 docker rmi shipyard/shipyard で特定の REPOSITORY のすべてのイメージを削除したりできます。

まとめ

docker を使い続けていると起きることのある問題の対処方法を紹介しました。

本題ではないので上には書いていませんが、 イメージがたまっている状態で削除する前に docker images -viz を見てみるのも面白いかもしれません。

Disqus Comments

Kazuhiro NISHIYAMA

Ruby のコミッターとかやってます。 フルスタックエンジニア(って何?)かもしれません。 About znzに主なアカウントをまとめました。

znz znz


Published