備忘録兼ての記事です。同じエラーに詰まっている方いたら参考にしてもらえればと思います。
どういう状況で起きたか
ローカルで色々いじってて、一度本番環境でも動かそうと思い、プッシュ→EC2でpullしてから起きたエラーです。gemfileを書き換えたりしたのでまずはdocker-compose build
をしました。
エラー内容
$ git pull origin main
$ docker-compose up --build
=> ERROR [movie-review_rails internal] load build context
failed to solve: write /var/lib/docker/overlay2/jnpzgi9l9yabr840us49zue21/diff/vendor/bundle/ruby/3.1.0/gems/sassc-2.4.0/ext/libsass/src/parser.cpp: no space left on device
原因
EBSボリュームがいっぱいになっている。
解決法
一旦イメージなどを全部削除してしまえば、容量が復活すると思いますので
下記を実行して、docker関連のimageを全削除し、docker-compose up
でイメージの再作成すればno space left on device
エラーは解消されます。
$ docker-compose down
$ docker image prune -a
$ docker volume prune
$ docker system prune
$ docker-compose up --build
//途中、本当に消すか```yes or no[y/n]```で聞かれる場合はyを入力してEnterします。
ちなみにdocker-compose up --build
などで毎回buildし直すとイメージが大量に作成されてしまい、すぐに容量がいっぱいになってしまいますので、buildするのはイメージの再作成したい時だけにするとこのエラーはあまり発生しなくなります。
自分の場合はおそらく大量の画像ファイルをDocker イメージの中に含めてしまっていたため、イメージサイズが増えすぎてしまい、buildするたびに容量が足りなくなっていたのだと思います。
docker imageのファイルサイズが大きい場合はEC2に割り当てている、EBSのボリューム量を増やすか、または画像ファイルはs3に保存する形にしないといけないですね。
それでも解決しない場合
容量がギリギリ足りていれば下記をやるだけで良いのですが、Docker image + volumeのサイズがEBSサイズよりも大きなものになっていたら、下記を何度やっても容量がなくなってしまいます
$ docker-compose down
$ docker image prune -a
$ docker volume prune
$ docker system prune
$ docker-compose up --build
これでbuildし直しても容量エラーが出るのでしたら、EBSボリュームの容量アップが必要になります。
ボリュームを増やすには下記をやればOKですが、利用料金が増えるので増やしすぎは注意ですね。
https://itsakura.com/aws-ec2-ebs-volume