1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

docker-compose buildが突然失敗するようになった原因

Last updated at Posted at 2021-08-11

はじめに

右も左もわからないプログラミング初心者が書く備忘録です。
膨大な勉強量の中で気になった事をメモしていきます。

今回の内容

普段から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しか増えてない:sweat_smile:

もう一度確認してみると

$ 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することができました:thumbsup:

ちなみにvolumeも対象にしたい場合は

Docker 17.06.1 以降では、 docker system prune でボリュームも削除するには --volumes

~ 補足 ~

下記リンクへ移動しました!

最後に

勉強を始めたばかりで知識もなく、拙い文章ですがアウトプットすることで頭の中を整理しつつ、どなたかのお役に立てれば良いなと思い投稿させて頂きました。
最後まで見て頂きありがとうございました!

1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?