【问题标题】:Docker: You must use Bundler 2 or greater with this lockfileDocker:您必须使用 Bundler 2 或更高版本与此锁定文件
【发布时间】:2020-04-14 17:53:00
【问题描述】:

我正在尝试将捆绑程序版本 2.1 安装在从 ruby:2.4.1 构建的 docker 映像中。我的 Docker 文件如下所示:

FROM ruby:2.4.1

RUN \
  gem update --system --quiet && \
  gem install  bundler -v '~> 2.1'

# Other commands

但是当我尝试运行 bundle install 时它失败了

You must use Bundler 2 or greater with this lockfile.

当我在容器 gem info bundler 内运行时,它会输出:

bundler (2.1.2, 1.15.4)
    Authors: André Arko, Samuel Giddins, Colby Swandale, Hiroshi
    Shibata, David Rodríguez, Grey Baker, Stephanie Morillo, Chris
    Morris, James Wen, Tim Moore, André Medeiros, Jessica Lynn Suttles,
    Terence Lee, Carl Lerche, Yehuda Katz
    Homepage: https://bundler.io
    License: MIT
    Installed at (2.1.2): /usr/local/bundle
                 (1.15.4): /usr/local/lib/ruby/gems/2.4.0

我尝试了以下修复:

# Set bundler 2.1.2 as default
bundler config default 2.1.2

# Update bundler
gem update bundler

但他们没有工作。系统继续使用bundlerv1.15.4

如何在 ruby​​ docker 映像中将 bundler v2.1.2 设为默认值?

【问题讨论】:

  • 你的Gemfile.lock中的版本号是多少;正好是 2.1.2 吗?您能否编辑您的问题以包含相关的 COPYRUN Dockerfile 指令来重现此问题?
  • @DavidMaze Gemfile.lock 有BUNDLED WITH 2.1.1。我猜任何大于2.0.0 的捆绑器版本都可以。我使用问题中的 docker image 使用 Gitlab CI 运行构建,并且没有重现该问题的 RUN 和 COPY 命令。这些命令位于.gitlab-ci.yml。我会更新我的问题,谢谢
  • Bundler 2.1 具有a pretty significant bug,您必须完全安装在Gemfile.lock 版本中命名的捆绑器版本。症状与您在此处描述的不太一样,但语义版本约束不再起作用。 gem install bundler -v 2.1.1 有影响吗?
  • 你能通过 gem 卸载移除 v1.15.4 吗?

标签: ruby docker bundler


【解决方案1】:

我能够使用以下命令在我的 docker 映像中切换到 bundler 2.1 版:

# Dockerfile
RUN \
  gem update --system --quiet && \
  gem install  bundler -v '~> 2.1'
ENV BUNDLER_VERSION 2.1

【讨论】:

    【解决方案2】:

    对于使用以前的版本,请尝试此修复。看起来像 Gemfile.lock 的问题。尝试从 gemfile.lock 中删除 BUNDLED WITH。

    删除类似的东西并重新构建

    BUNDLED WITH
       2.1.4
    

    【讨论】:

      猜你喜欢
      • 2019-04-13
      • 2020-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-18
      • 1970-01-01
      • 2019-06-20
      • 1970-01-01
      相关资源
      最近更新 更多