为什么 "bundle install" 在构建我的 docker 存储库时返回错误?
Why is "bundle install" returning an error when building my docker repository?
我正在学习如何使用 docker 构建 rails 应用程序,每次尝试 运行 $ docker-compose build web
时,我都会收到以下错误:
You must use Bundler 2 or greater with this lockfile.
ERROR: Service 'web' failed to build: The command '/bin/sh -c bundle install' returned a non-zero code: 20
这是我的 Dockerfile:
FROM ruby:2.5.1
ENV APP_HOME /usr/src/app
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev
# Node.js
RUN curl -sL https://deb.nodesource.com/setup_8.x | bash - \
&& apt-get install -y nodejs
RUN apt-get update && apt-get install -y curl apt-transport-https wget && \
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \
echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \
apt-get update && apt-get install -y yarn
# SOURCE CODE
WORKDIR $APP_HOME
COPY . $APP_HOME/
RUN gem install bundler --version 2.0.2 --no-rdoc --no-ri
ADD Gemfile $APP_HOME/
ADD Gemfile.lock $APP_HOME/
RUN bundle install
RUN echo '--color' >> ~/.rspec
这是我的 docker-compose.yml 文件
version: '3'
services:
db:
image: postgres
webpacker:
build: .
command: bundle exec bin/webpack-dev-server
volumes:
- .:/fancyapp
ports:
- "8080:8080"
web:
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0'
volumes:
- .:/fancyapp
ports:
- "3000:3000"
depends_on:
- db
- webpacker
我完全是 docker 的菜鸟,老实说,我看不出这里有什么问题。
我的实施基于 this tutorial
运行命令gem list bundler
,我猜你的bundler
版本低于版本2。
如果是这样,运行 gem install bundler -v 2.0.2
安装最新的。
您可以 运行 gem install --default bundler -v 2.0.2
使其成为要使用的默认版本。
你的 Gemfile.lock
中好像说你使用的是版本高于 2 的 bundler
。在这种情况下,你可以使用两种方式:
降低本地版本
添加到您的 docker 文件字符串 gem install bundler
(无版本)。它将最后安装 bundler
我正在学习如何使用 docker 构建 rails 应用程序,每次尝试 运行 $ docker-compose build web
时,我都会收到以下错误:
You must use Bundler 2 or greater with this lockfile.
ERROR: Service 'web' failed to build: The command '/bin/sh -c bundle install' returned a non-zero code: 20
这是我的 Dockerfile:
FROM ruby:2.5.1
ENV APP_HOME /usr/src/app
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev
# Node.js
RUN curl -sL https://deb.nodesource.com/setup_8.x | bash - \
&& apt-get install -y nodejs
RUN apt-get update && apt-get install -y curl apt-transport-https wget && \
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \
echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \
apt-get update && apt-get install -y yarn
# SOURCE CODE
WORKDIR $APP_HOME
COPY . $APP_HOME/
RUN gem install bundler --version 2.0.2 --no-rdoc --no-ri
ADD Gemfile $APP_HOME/
ADD Gemfile.lock $APP_HOME/
RUN bundle install
RUN echo '--color' >> ~/.rspec
这是我的 docker-compose.yml 文件
version: '3'
services:
db:
image: postgres
webpacker:
build: .
command: bundle exec bin/webpack-dev-server
volumes:
- .:/fancyapp
ports:
- "8080:8080"
web:
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0'
volumes:
- .:/fancyapp
ports:
- "3000:3000"
depends_on:
- db
- webpacker
我完全是 docker 的菜鸟,老实说,我看不出这里有什么问题。 我的实施基于 this tutorial
运行命令gem list bundler
,我猜你的bundler
版本低于版本2。
如果是这样,运行 gem install bundler -v 2.0.2
安装最新的。
您可以 运行 gem install --default bundler -v 2.0.2
使其成为要使用的默认版本。
你的 Gemfile.lock
中好像说你使用的是版本高于 2 的 bundler
。在这种情况下,你可以使用两种方式:
降低本地版本
添加到您的 docker 文件字符串
gem install bundler
(无版本)。它将最后安装bundler