我安裝了 Ruby 2.7.5,并在 Dockerfile 中指定了要安裝的捆綁程式(版本 2.2.0):
RUN gem install bundler -v 2.2.0 --no-document
這個的輸出是:
INFO[0093] RUN gem install bundler -v 2.2.0 --no-document
INFO[0093] cmd: /bin/sh
INFO[0093] args: [-c gem install bundler -v 2.2.0 --no-document]
INFO[0093] Running: [/bin/sh -c gem install bundler -v 2.2.0 --no-document]
Successfully installed bundler-2.2.0
在那次安裝中一切似乎都很好,并且安裝bundle了中指定的 gem Gemfile。但是,當我嘗試打開控制臺時,我看到:
/usr/lib/ruby/2.7.0/rubygems.rb:277:in `find_spec_for_exe': Could not find 'bundler' (2.2.0) required by your /app/Gemfile.lock. (Gem::GemNotFoundException)
To update to the latest version installed on your system, run `bundle update --bundler`.
To install the missing version, run `gem install bundler:2.2.0`
但是,它已安裝。從上面可以看到。此外,當我在 Dockerfile 中輸出版本時,我看到:
Bundler version 2.2.0
它似乎安裝得很好,但是,仍然看到上面的錯誤,并且它立即崩潰。
有什么明顯的我做錯了嗎?
uj5u.com熱心網友回復:
使用更新的 Bundler 版本構建 Docker 映像
您在捆綁 gem 的 Dockerfile 構建中缺少幾個步驟。更新 Bundler 后,您還需要更新 Gemfile.lock 并可能重新運行bundle install。涉及很多選項,但這是我根據您的帖子對您??的 Dockerfile 的個人建議:
# Note: Don't lock your Bundler version unless you
# have a VERY good reason to do so. Update will
# install or update, as needed.
RUN gem update bundler --no-document \
&& gem clean bundler \
&& bundle update --bundler \
&& bundle install
這里的關鍵是,如果您不使用bundle update --bundlerGemfile.lock 將不包含您期望呼叫的 Bundler 版本。如有必要,最新版本的 Bundler 會將自身降級到 Gemfile.lock 中的版本,所以這確實是整個事情的關鍵。
此外,如果您在應用上述方法后仍然遇到問題,您可能需要弄清楚 Bundler 實際安裝在容器映像中的位置。雖然 Bundler(當前)不從您的包中運行,但仍需要在GEM_HOME、GEM_ROOT或GEM_PATH中找到所需的版本,以便在您呼叫它時找到它。
作為最后的考慮,如果您在本地構建 gem 或修改 Gemfile.lock,然后使用 ADD 或 COPY 命令將 Gemfile.lock 或任何供應商的 gem 放入容器映像中,則需要在外部執行這些活動Docker 而不是在 Dockerfile 里面。根據您的原始帖子,您現在似乎并沒有這樣做,但在您解決這個問題時,這是另一個需要考慮的選擇。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/484996.html
標籤:红宝石 码头工人 dockerfile 红宝石 打包机
