1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Rails, Dockerのマルチステージビルドに失敗した時の対応

Posted at

問題

  • 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

対応について

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

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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?