Ruby on rails 您必须在此锁定文件中使用Bundler 2或更高版本。在本地运行docker compose时

Ruby on rails 您必须在此锁定文件中使用Bundler 2或更高版本。在本地运行docker compose时,ruby-on-rails,ruby,docker,docker-compose,dockerfile,Ruby On Rails,Ruby,Docker,Docker Compose,Dockerfile,docker新手,我一直试图在rails项目中使用它,但一直无法启动它 尝试更改ruby版本和搜索web,但大多数问题都涉及到将应用程序部署到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

docker新手,我一直试图在rails项目中使用它,但一直无法启动它

尝试更改ruby版本和搜索web,但大多数问题都涉及到将应用程序部署到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"]
码头工人

version: '3'
services:
  web:
    build: .
    command: rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/zssn
    ports:
      - "3000:3000"
docker build--没有缓存,在运行bundler命令安装它时似乎工作正常

 ---> Running in d4650608f428
Successfully installed bundler-2.0.1

有什么想法吗?

我认为您需要升级到bundler 2附带的ruby映像(例如来自ruby:2.6.3的
),或者使用您想要使用的bundler版本重新处理您的
Gemfile.lock
。至少这对我来说是有效的

按照工程师的建议调整环境变量是行不通的


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

在运行bundle安装之前将这一行添加到Dockerfile对我来说很有帮助

RUN gem install bundler -v 2.0.1

将此留在此处以备将来参考

在Gemfile.lock的底部,您可以找到捆绑包版本:

BUNDLED WITH
2.0.1

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

您需要更新Rubygems:

RUN gem update --system
除了确保您拥有正确的bundler版本外,请运行:

RUN gem install bundler -v 2.0.1

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

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

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

BUNDLED WITH
   2.1.4
如果您有其他版本,可以通过运行
bundle update--Bundler

Dockerfile
中,将环境变量
BUNDLER\u VERSION
覆盖到所需的BUNDLER版本并安装:

ENV BUNDLER_VERSION=2.1.4

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

谢谢你的回复!试过了,但还是没有运气。这对我不起作用。。。有什么建议吗?我使用bundler 2.1.4在本地创建了该项目,并在Dockerfile上指定了相同的版本以及一个gem更新——之前的系统。