您必须将此捆绑文件使用Bundler 2或更高版本。在本地运行docker-compose时

时间:2019-04-29 19:17:36

标签: ruby-on-rails ruby docker docker-compose dockerfile

Docker的新手,我一直在尝试将其与Rails项目一起使用,但无法启动它。

试图更改红宝石版本并搜索网络,但是大多数问题涉及将应用程序部署到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 个答案:

答案 0 :(得分:2)

您需要更新Rubygems:

RUN gem update --system

除了确保您拥有正确的捆绑程序版本之外,请运行:

RUN gem install bundler -v 2.0.1

Here,您可以找到更深入的解释。

答案 1 :(得分:0)

我认为您需要升级到捆绑软件2随附的红宝石图像(例如FROM ruby:2.6.3),或者将Gemfile.lock与您要使用的捆绑软件版本重新捆绑在一起。或至少这对我有用。

按照Bundler guides的建议调整环境变量无效。

github issue使我认为这是预期的行为,但我可能完全错了。

答案 2 :(得分:0)

在将RUN捆绑包安装到Dockerfile之前添加此行对我有用。

RUN gem install bundler -v 2.0.1

将其留在此处以供将来参考!

答案 3 :(得分:0)

在您Gemfile.lock的底部,您可能会找到捆绑软件版本:

BUNDLED WITH
2.0.1

请确保将其与正确的版本捆绑在一起

答案 4 :(得分:0)

Ruby映像随附已安装的bundler。 默认情况下,环境变量BUNDLER_VERSION设置为bundler的预安装版本。即使您卸载此版本,bundle也会检查此环境变量和 如果存在v1 / v2不匹配,则会引发错误“您必须将此捆绑文件使用Bundler 2或更高版本”

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

BUNDLED WITH
   2.1.4

如果有其他版本,则可以通过运行bundle update --bundler https://bundler.io/man/bundle-update.1.html

将应用程序升级到最新安装的Bundler版本。

Dockerfile中,将环境变量BUNDLER_VERSION覆盖到所需的捆绑软件版本并安装:

ENV BUNDLER_VERSION=2.1.4

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