はじめに
右も左もわからないプログラミング初心者が書く備忘録です。
膨大な勉強量の中で気になった事をメモしていきます。
今回の内容
普段からDocker環境で制作を行っているのですが、突然 build が出来なくなるエラーに遭遇しました。
Dockerを使い始める時に気にはしていたのですが、ここに来て解消方法がわかったのでメモしておきます
開発環境
Rails 6.1.3.2
ruby 2.5.1
Docker version 20.10.6
原因
docker imagesによるホストディスク容量の圧迫
解決方法
docker system prune
詳細
docker-compose buildした際のエラー文
$ docker-compose build
・
・
・
Fetching sassc 2.4.0
Installing sassc 2.4.0 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
current directory: /usr/local/bundle/gems/sassc-2.4.0/ext
/usr/local/bin/ruby -I /usr/local/lib/ruby/2.7.0 -r
./siteconf .rb extconf.rb
creating Makefile
current directory: /usr/local/bundle/gems/sassc-2.4.0/ext
make "DESTDIR=" clean
current directory: /usr/local/bundle/gems/sassc-2.4.0/ext
make "DESTDIR="
・
・
・
./libsass/src/・・・: fatal error: error writing to /tmp/ファイル名:
No space left on device
}
^
compilation terminated.
make: *** [Makefile:237: ・・・] Error 1
make failed, exit code 2
Gem files will remain installed in /usr/local/bundle/gems/sassc-2.4.0 for
inspection.
Results logged to
/usr/local/bundle/extensions/x86_64-linux/2.7.0/sassc-2.4.0/gem_make.out
An error occurred while installing sassc (2.4.0), and Bundler cannot continue.
Make sure that `gem install sassc -v '2.4.0' --source 'https://rubygems.org/'`
succeeds before bundling.
In Gemfile:
sass-rails was resolved to 6.0.0, which depends on
sassc-rails was resolved to 2.1.2, which depends on
sassc
------
executor failed running [/bin/sh -c bundle config --local set path 'vendor/bundle' && bundle install]: exit code: 5
ERROR: Service 'web' failed to build : Build failed
注目したのはここと
# native extensionがinstallできませんでしたよ〜
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
ここ
# お使いのデバイスにスペースがありませんよ〜
fatal error: error writing to /tmp/ファイル名:
No space left on device
ということで何が容量を埋め尽くしているのかを見てみます
$ docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 49 0 49.74GB 49.74GB (100%)
Containers 0 0 0B 0B
Local Volumes 26 0 1.216GB 1.216GB (100%)
Build Cache 203 0 3.866GB 3.866GB
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
アプリ名 latest 8 hours ago 3.5GB
<none> <none> 5fb9f473d4c8 5 days ago 2.98GB
<none> <none> 187b8bedc8e6 7 days ago 2.86GB
<none> <none> ddfdc3540057 7 days ago 2.8GB
<none> <none> 58bc9d0e3d4e 7 days ago 2.8GB
<none> <none> 79681fda5f2b 7 days ago 2.79GB
<none> <none> 77d61e5e8b30 7 days ago 2.79GB
<none> <none> 54863d6618a9 8 days ago 2.78GB
<none> <none> d2fdbf6c5f00 8 days ago 2.79GB
<none> <none> 1fbf0779792e 8 days ago 2.77GB
<none> <none> c13b041c6489 8 days ago 2.77GB
<none> <none> 1868c1cf1de9 9 days ago 2.68GB
<none> <none> 8d9d14f39e2f 11 days ago 2.6GB
<none> <none> 979159b2f6ed 11 days ago 2.55GB
<none> <none> 5c7c059ee128 2 weeks ago 2.37GB
<none> <none> 3353f7b8bdfc 2 weeks ago 2.36GB
今までの蓄積に加え、設定に手こずり何度もbuildしたおかげでimagesが膨大になっております。。。
簡単に言えばimagesを全消去すれば良いのですがそんなわけにもいかず
「使用していないデータだけ削除したい」
そこでdocker-docsに教えて頂いた prune というコマンドを使ってみます
$ docker image prune
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] y # y を打ち Enter
・
・
・
Total reclaimed space: 112.4MB
え。。。112MBしか増えてない
もう一度確認してみると
$ docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 7 0 6.264GB 6.264GB (100%)
Containers 0 0 0B 0B
Local Volumes 26 0 1.216GB 1.216GB (100%)
Build Cache 203 0 47.23GB 47.23GB
大半が Build Cache へ移行したので、ホストのディスク容量の変化が少なかったみたいです
なのでimagesに絞らずBuild Cacheを含め、イメージ、コンテナ、ネットワーク全てを対象にpluneします
$ docker system prune
WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all dangling images
- all dangling build cache
Are you sure you want to continue? [y/N] y # y を打ち Enter
Deleted build cache objects:
・
・
・
Total reclaimed space: 47.23GB
docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 7 0 6.264GB 6.264GB (100%)
Containers 0 0 0B 0B
Local Volumes 26 0 1.216GB 1.216GB (100%)
Build Cache 32 0 0B 0B
これでホストのディスク容量も復活し、無事にbuildすることができました
ちなみにvolumeも対象にしたい場合は
Docker 17.06.1 以降では、 docker system prune でボリュームも削除するには --volumes
~ 補足 ~
下記リンクへ移動しました!
最後に
勉強を始めたばかりで知識もなく、拙い文章ですがアウトプットすることで頭の中を整理しつつ、どなたかのお役に立てれば良いなと思い投稿させて頂きました。
最後まで見て頂きありがとうございました!