問題
- 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
まで指定する必要はないように思われる
-