背景
DockerFileからdocker buildを行いイメージ作成をする際に、容量不足で最後まで実行できないことが発生したため。
エラー時は下記メッセージが出る。
no space left on device
下記サイトを参考にさせていただきました。
https://rurukblog.com/post/Linux-disk-research/
確認方法
1.PCの容量を確認する。
設定からストレージを確認し容量が足りているか確認。ローカル環境でdockerを使用している場合はこれが原因の場合がある。
2.docker上の容量を確認
下記コマンドを実行。docker内のイメージ、コンテナ、ボリューム、ビルドキャッシュが表示される。
docker system df
実行すると下記のような表示になる。RECLAIMABLEは「使用されていない」イメージによって消費されるスペース。
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 1 0 5.068GB 5.068GB (100%)
Containers 0 0 0B 0B
Local Volumes 0 0 0B 0B
Build Cache 0 0 0B 0B
下記コマンドでイメージ、コンテナの詳細が確認できる。
#イメージの詳細を確認できる。
docker images
#コンテナの詳細を確認できる。
docker ps -a
3.ディスク使用量を確認
下記コマンドを入力するとディスク容量が確認できる。
df -h
実行結果は下記。
これを見ると/dev/xvda1 が使用領域が多いことがわかる。
ファイルシス サイズ 使用 残り 使用% マウント位置
/dev/xvda1 20G 13G 7.7G 62% /
4.容量が多いフォルダの特定
マウント位置が ”/” なのでそこの容量一覧を取得するために下記コマンドを使用。
du -sh /*
Permission deniedが表示される場合は下記コマンドを使用。
sudo du -sh /*
6.6G /var
同様の作業を繰り返す。
du -sh /var/*
#コマンド結果
4.9G /var/lib
du -sh /var/lib/*
#コマンド結果
4.9G /var/lib/docker
du -sh /var/lib/docker/*
#コマンド結果
4.9G /var/lib/docker/overlay2
上記作業により、”/var/lib/docker/overlay2”の容量が大きいことが確認できる。
overlay2フォルダはDockerコンテナのファイルシステムを管理するためのストレージドライバーの一つのようだ。
dockerビルドが失敗した時も、ここに途中までダウンロードしたファイルなどの不要ファイルが溜まっていくことが起きていた。それにより容量不足になりエラーメッセージが表示されていた。
5.容量の削除
overlay2 配下の不要なファイルを削除するには下記コマンドを使用。
先ほどのRECLAIMABLEも削除対象である。
確認画面が出るがyesで実行。
docker system prune -a
実行すると、使用されていない容量が解放されてエラーが解消される。
再度、手順2を確認するとわかりやすい。
まとめ
Dockerの容量不足の原因を調査した。結果的にエラーの際の不要ファイルがたまっていることが原因だった。