問題
- dockerのマルチステージビルドにて
bundle installの内容をコピーしていたCOPY --from=builder /usr/local/bundle /usr/local/bundle- ここについての詳細は、Railsのdockerイメージを小さくする方法などで調べてください
-
Bundler 2.1.1,RubyGem 3.1.1がリリースされたことで、dockerビルド時のバージョンが勝手にアップデートされ、Railsが起動できなくなった
対応
-
/usr/local/libもコピーする
COPY --from=builder /usr/local/lib /usr/local/lib
COPY --from=builder /usr/local/bundle /usr/local/bundle
詳細
エラーの詳細
- nokogiriなどの
with native extensionなgemが全て読み込まれなくなっていた- 以下のようなエラーが発生
- bundle実行時
Could not find nokogiri-1.10.7 in any of the sources
-
gem listなど実行時Ignoring nokogiri-1.10.7 because its extensions are not built. Try: gem pristine nokogiri --version 1.10.7
- bundle実行時
- 以下のようなエラーが発生
対応について
-
/usr/local/libをコピーしたものとしていないものを比較すると、/usr/local/lib/ruby/site_rubyの容量が変わっていたため、このあたりにnative extension周りのものが含まれると思われる(ここの詳細はわかっていません)-
/usr/local/libではなく、/usr/local/lib/rubyのみのコピーでも動作可能 -
/usr/local/lib/ruby配下はsite_ruby以外に容量の変化はなかったため、/usr/local/lib/ruby/site_rubyまで指定する必要はないように思われる
-