在构建过程中使用 Dockerfile "Could not locate gemfile"在轨道上安装 Ruby



我有一个学校任务需要我这样做:

您将创建您的第一个 Dockerfile 来容器化 Rails 应用。这是一种特殊的配置:这个特殊的 Dockerfile 将是通用的,并在另一个 Dockerfile 中调用,即 将看起来像这样:

FROM ft-rails:on-build
EXPOSE 3000
CMD ["rails", "s", "-b", "0.0.0.0", "-p", "3000"]

您的通用容器应通过 ruby 容器安装所有 必要的依赖项和 gem,然后在 容器的/opt/app 文件夹。Docker必须安装的 在构建时提供适当的 gem,但也启动迁移和 应用程序的数据库填充。子 Dockerfile 应该 启动 Rails 服务器(参见下面的示例(。如果你不知道什么 要使用的命令,是时候看看 Ruby on Rails 了 文档。

现在我的 Dockerfile 看起来像这样:

FROM ruby
RUN apt-get update -y && apt-get upgrade -y && apt-get install -y sqlite3 build-essential nodejs libpq-dev
RUN gem update && gem install rails && gem install bundler
RUN mkdir /opt/app
ONBUILD WORKDIR /opt/app/
ONBUILD ADD . /opt/app
ONBUILD EXPOSE 3000
ONBUILD RUN bundle install
ONBUILD RUN rake db:setup
ONBUILD RUN rake db:seed

当我构建这个 Dockerfile 时,它工作正常。 当我回到作业中给出的通用 dockerfile 并尝试构建这个文件时,我收到错误:

Could not locate Gemfile
The command '/bin/sh -c bundle install' returned a non-zero code: 10

我不是轨道上的红宝石专家,刚刚开始使用它来完成这项任务。我不知道我做错了什么或如何解决这个问题,并在网上寻找答案但没有成功...... 任何帮助都是超级欢迎的!

构建它时,请确保您位于 Rails 项目根文件夹中。您应该已经在此文件夹中运行了rails new your-project-name来生成此文件夹。

命令ONBUILD ADD . /opt/app将以递归方式将当前文件夹复制到 Docker 镜像中,因此它必须已经包含 Gemfile 和 Rails 项目的所有其他部分。

Bundler(安装 gems - ruby 库(使用一个名为 Gemfile 的文件。它创建一个 Gemfile.lock 文件,该文件存储来自 Gemfile 的每个 gem 的版本及其依赖项。

您缺少的是项目文件夹中的 Gemfile 文件。

您需要添加该宝石文件。

source 'https://rubygems.org'
gem 'rails', '~>5'

和一个 Gemfile.lock

touch Gemfile.lock

我知道这不是您问题的确切答案,但请阅读此处的文档:https://docs.docker.com/compose/rails/

相关内容

最新更新