質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.77%

Ruby on Rails5で作成したアプリの開発環境にDockerを導入した時のエラー

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 620

score 5

前提

Rails・Docker初心者です。伝わりづらい内容で恐縮ですが、どうぞよろしくお願いいたします。
Ruby on Railsで作成したアプリの開発環境にDockerの導入をしています。

実現したいこと

Ruby on Railsで作成したアプリ(開発環境)にdocker-composeを使用し構築をしています。
作成アプリのディレクトリに、「Dockerfile」「docker-compose.yml」のファイルを作成し、コマンド実行でDockerの導入をしています。

上記のファイルを作成後、コマンド「docker-compose build」を実行すると、以下のエラーが発生し、ビルドができない状態になっています。

エラーメッセージ

issei1213@MacBook my_app % docker-compose build
db uses an image, skipping
Building web
Step 1/9 : FROM ruby:2.5.1
 ---> 3c8181e703d2
Step 2/9 : RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
 ---> Using cache
 ---> 042bc1175782
Step 3/9 : RUN mkdir /myproject
 ---> Using cache
 ---> d18444e6727c
Step 4/9 : WORKDIR /myproject
 ---> Using cache
 ---> b8fd61f51b1c
Step 5/9 : ADD Gemfile /myproject/Gemfile
 ---> Using cache
 ---> b1abddb9eefb
Step 6/9 : ADD Gemfile.lock /myproject/Gemfile.lock
 ---> Using cache
 ---> 7b400e0dea6b
Step 7/9 : RUN gem install bundler
 ---> Using cache
 ---> 9d9b58c36163
Step 8/9 : RUN bundle install
 ---> Running in e64abf280e87
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

該当のソースコード

FROM ruby:2.5.1
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
RUN mkdir /myproject

WORKDIR /myproject

ADD Gemfile /myproject/Gemfile
ADD Gemfile.lock /myproject/Gemfile.lock

RUN gem install bundler
RUN bundle install

ADD . /myproject
version: '3'
services:
  db:
    image: mysql:5.6
    environment:
      MYSQL_DATABASE: my_app_development
      MYSQL_ROOT_PASSWORD:
      MYSQL_USER: root
      MYSQL_PASSWORD:
    ports:
      - "3306:3306"
  web:
    build:
      context: .
      dockerfile: Dockerfile
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    tty: true
    stdin_open: true
    depends_on:
      - db
    ports:
      - "3000:3000"
    volumes:
      - .:/myproject

試したこと

エラー内容よりbundle installができていないと判断しました。
様々な記事を参考にすると、「You must use Bundler 2 or greater with this lockfile.」のエラーは、 bundleのバージョンが2.Xであると、動かないという記事を多数見つけました。

記事を参考にし、Gemfile.lockを削除 or ファイルの中身を削除し、旧バージョンでインストールを試みましたが、Gemfile.lockが削除後すぐに復活し、コマンドの実行ができませんでした。

そもそもbundle installに問題があるという判断をしていることが正しいかの、判断もできていない状態です。

お忙しい中、恐れ入りますが解決にご協力いただきます様、よろしくお願いいたします。

補足情報(FW/ツールのバージョンなど)

  • Ruby : 2.5.1
  • Rails : 5.2.4.2
  • Bundler : 2.1.4
  • mysql : 5.6.46
  • Docker : 19.03.8
  • docker-compose : 1.25.4
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

You must use Bundler 2 or greater with this lockfile.


エラーのログには上記が書かれています。

RUN gem install bundler


RUN gem update --system && gem install bundler:2.0.2


にするといかがでしょうか。(Gemfile.lockのBUNDLED WITHの下にBundlerのバージョンの記載があります。適宜2.0.2を変更してください)

これでもできない場合には、以下を参考にしてみるといいかもしれません。
https://qiita.com/tanakaworld/items/e15ff9dbdd4b628378c2

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/04/04 22:23

    また2.1.4に変えるだけでも動かない場合、
    ```
    WORKDIR /myproject
    ADD Gemfile /myproject/Gemfile
    ADD Gemfile.lock /myproject/Gemfile.lock
    RUN gem install bundler
    RUN bundle install
    ADD . /myproject
    ```
    の部分を以下のように変えるといかがでしょうか?

    ```
    ENV APP_ROOT /app
    WORKDIR $APP_ROOT

    ADD Gemfile Gemfile.lock $APP_ROOT/

    RUN gem install bundler:2.1.4

    RUN bundle install

    ADD . $APP_ROOT
    ```

    キャンセル

  • 2020/04/04 22:46

    早速のご連絡ありがとうございます。記載頂いた内容の結果を以下に記載します。
    1)bundlerのバージョンは2.1.4で実行
      → 結果変わりませんでした。以下に、結果を記載します。
    ```
    db uses an image, skipping
    Building web
    Step 1/9 : FROM ruby:2.5.1
    ---> 3c8181e703d2
    Step 2/9 : RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
    ---> Using cache
    ---> 042bc1175782
    Step 3/9 : RUN mkdir /myproject
    ---> Using cache
    ---> d18444e6727c
    Step 4/9 : WORKDIR /myproject
    ---> Using cache
    ---> b8fd61f51b1c
    Step 5/9 : ADD Gemfile /myproject/Gemfile
    ---> Using cache
    ---> b1abddb9eefb
    Step 6/9 : ADD Gemfile.lock /myproject/Gemfile.lock
    ---> f0adf8eb52f9
    Step 7/9 : RUN gem update --system && gem install bundler:2.1.4
    ---> Running in c954d8aed3cf
    Updating rubygems-update
    Successfully installed rubygems-update-3.1.2
    Installing RubyGems 3.1.2
    Successfully built RubyGem
    Name: bundler
    Version: 2.1.2
    File: bundler-2.1.2.gem
    Bundler 2.1.2 installed
    RubyGems 3.1.2 installed
    Regenerating binstubs

    === 3.1.2 / 2019-12-20

    Minor enhancements:

    * Restore non prompting `gem update --system` behavior. Pull request #3040
    by David Rodríguez.
    * Show only release notes for new code installed. Pull request #3041 by
    David Rodríguez.
    * Inform about installed `bundle` executable after `gem update --system`.
    Pull request #3042 by David Rodríguez.
    * Use Bundler 2.1.2. Pull request #3043 by SHIBATA Hiroshi.

    Bug fixes:

    * Require `uri` in source.rb. Pull request #3034 by mihaibuzgau.
    * Fix `gem update --system --force`. Pull request #3035 by David
    Rodríguez.
    * Move `require uri` to source_list. Pull request #3038 by mihaibuzgau.

    === 3.1.1 / 2019-12-16

    Bug fixes:

    * Vendor Bundler 2.1.0 again. The version of Bundler with
    RubyGems 3.1.0 was Bundler 2.1.0.pre.3. Pull request #3029 by
    SHIBATA Hiroshi.

    === 3.1.0 / 2019-12-16

    Major enhancements:

    * Vendor bundler 2.1. Pull request #3028 by David Rodríguez.

    Minor enhancements:

    * Check for rubygems.org typo squatting sources. Pull request #2999 by
    Luis Sagastume.
    * Refactor remote fetcher. Pull request #3017 by David Rodríguez.
    * Lazily load `open3`. Pull request #3001 by David Rodríguez.
    * Remove `delegate` dependency. Pull request #3002 by David Rodríguez.
    * Lazily load `uri`. Pull request #3005 by David Rodríguez.
    * Lazily load `rubygems/gem_runner` during tests. Pull request #3009 by
    David Rodríguez.
    * Use bundler to manage development dependencies. Pull request #3012 by
    David Rodríguez.

    Bug fixes:

    * Remove unnecessary executable flags. Pull request #2982 by David
    Rodríguez.
    * Remove configuration that contained a typo. Pull request #2989 by David
    Rodríguez.

    Compatibility changes:

    * Remove 1.8.7 leftovers. Pull request #2972 by David Rodríguez.
    * Deprecate `gem generate_index --modern` and `gem generate_index
    --no-modern`. Pull request #2992 by David Rodríguez.
    〜省略〜

    RubyGems installed the following executables:
    /usr/local/bin/gem
    /usr/local/bin/bundle

    RubyGems system software updated
    Successfully installed bundler-2.1.4
    1 gem installed
    Removing intermediate container c954d8aed3cf
    ---> f2f43501c875
    Step 8/9 : RUN bundle install
    ---> Running in 953f371f726d
    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

    2)Dockerfileの記述内容を変更
      → こちらも結果に変更ありませんでした。結果を記載します。
    db uses an image, skipping
    Building web
    Step 1/10 : FROM ruby:2.5.1
    ---> 3c8181e703d2
    Step 2/10 : RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
    ---> Using cache
    ---> 042bc1175782
    Step 3/10 : RUN mkdir /myproject
    ---> Using cache
    ---> d18444e6727c
    Step 4/10 : WORKDIR /myproject
    ---> Using cache
    ---> b8fd61f51b1c
    Step 5/10 : ENV APP_ROOT /app
    ---> Running in b02c4a7efc74
    Removing intermediate container b02c4a7efc74
    ---> 44439c461314
    Step 6/10 : WORKDIR $APP_ROOT
    ---> Running in 06a1bbee60d1
    Removing intermediate container 06a1bbee60d1
    ---> 6b97d1833988
    Step 7/10 : ADD Gemfile Gemfile.lock $APP_ROOT/
    ---> f4208f5c2c6f
    Step 8/10 : RUN gem install bundler:2.1.4
    ---> Running in f347ef34a090
    Successfully installed bundler-2.1.4
    1 gem installed
    Removing intermediate container f347ef34a090
    ---> 4296f3dc9fec
    Step 9/10 : RUN bundle install
    ---> Running in f721bd478d97
    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

    現象として、エラー内容に変化はありませんでした。
    取り急ぎ、結果をご連絡します。

    キャンセル

  • 2020/04/11 13:53

    ご連絡が遅くなり申し訳ございません。
    やはり、Grmlock.fileが自動復活する事が問題であったみたいで、別アプリで同じ操作をすした時には、bundlerのバージョンを下げることができました。このアプリ上で何かのGemが影響しているのかなと考えております。
    長い間ご連絡できずに、申し訳ございませんでした。また、真摯に対応頂きありがとうございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.77%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る