使用此锁定文件必须使用 Bundler 2 或更高版本。在本地运行 docker-compose up 时。

15
刚接触 Docker,我一直在尝试将其与我的 Rails 项目一起使用,但无法启动它。
尝试更改 Ruby 版本并搜索网络,但大多数问题涉及将应用程序部署到 Heroku,这不是我的情况。
Docker 文件:
FROM ruby:2.4.1
RUN mkdir /zssn
WORKDIR /zssn
COPY Gemfile /zssn/Gemfile
COPY Gemfile.lock /zssn/Gemfile.lock
RUN gem install bundler
RUN bundle --version
RUN bundle install
COPY . /zssn

CMD ["rails", "server"]

docker-compose.yml
version: '3'
services:
  web:
    build: .
    command: rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/zssn
    ports:
      - "3000:3000"

“docker build . --no-cache”命令在运行bundler命令安装时似乎表现良好。
 ---> Running in d4650608f428
Successfully installed bundler-2.0.1

任何想法?
5个回答

21
在Dockerfile中在运行bundle install之前添加此行,这对我起了作用。
RUN gem install bundler -v 2.0.1

留下这个作为将来参考!


这对我不起作用...有什么建议吗?我使用 bundler 2.1.4 在本地创建了项目,并在 Dockerfile 中指定了相同的版本以及进行了 gem update --system。 - javierojeda

7

Ruby镜像自带安装了bundler

环境变量BUNDLER_VERSION默认设置为预安装的bundler版本。即使您卸载了此版本,bundle仍会检查此环境变量, 如果存在v1/v2不匹配,将引发错误:“You must use Bundler 2 or greater with this lockfile”。

请确保您的Gemfile.lock与所需版本一起捆绑:

BUNDLED WITH
   2.1.4

如果你有其他版本的Bundler,你可以通过运行 bundle update --bundler 命令将应用程序升级到最新安装的版本。https://bundler.io/man/bundle-update.1.html

Dockerfile中覆盖环境变量BUNDLER_VERSION到所需的Bundler版本并进行安装:

ENV BUNDLER_VERSION=2.1.4

RUN gem update --system && \
    gem install bundler:2.1.4 && \
    bundle install

7

您需要更新Rubygems:

RUN gem update --system

除了确认您拥有正确的打包器版本外,请运行:

RUN gem install bundler -v 2.0.1

这里,您可以找到一个深入的解释。

2
在你的Gemfile.lock文件底部,你可能会找到bundle版本: "最初的回答"
BUNDLED WITH
2.0.1

请确保您将其与您拥有的正确版本捆绑在一起,最初的回答。

1
我认为你需要升级到带有bundler 2的ruby镜像(例如FROM ruby:2.6.3),或者使用你想要使用的bundler版本重新打包你的Gemfile.lock。至少对我来说是这样的。根据Bundler指南的建议调整环境变量并不起作用。这个github问题让我觉得这是预期行为,但我可能完全错了。

谢谢回复!我尝试了,但仍然没有成功。 - queroga_vqz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接