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

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

新規登録して質問してみよう
ただいま回答率
85.50%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

1回答

1644閲覧

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

issei1213

総合スコア5

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2020/04/03 12:25

前提

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

該当のソースコード

Dockerfile

1FROM ruby:2.5.1 2RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs 3RUN mkdir /myproject 4 5WORKDIR /myproject 6 7ADD Gemfile /myproject/Gemfile 8ADD Gemfile.lock /myproject/Gemfile.lock 9 10RUN gem install bundler 11RUN bundle install 12 13ADD . /myproject

docker

1version: '3' 2services: 3 db: 4 image: mysql:5.6 5 environment: 6 MYSQL_DATABASE: my_app_development 7 MYSQL_ROOT_PASSWORD: 8 MYSQL_USER: root 9 MYSQL_PASSWORD: 10 ports: 11 - "3306:3306" 12 web: 13 build: 14 context: . 15 dockerfile: Dockerfile 16 command: bundle exec rails s -p 3000 -b '0.0.0.0' 17 tty: true 18 stdin_open: true 19 depends_on: 20 - db 21 ports: 22 - "3000:3000" 23 volumes: 24 - .:/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

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

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/03 16:34

hatsu

総合スコア1809

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

issei1213

2020/04/04 13:14

ご連絡ありがとございます。 Gemfile.lockの記述とDockerfileの記述を変更しても現象変わらずでした ```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 ---> 129d41d736f5 Step 7/9 : RUN gem update --system && gem install bundler:2.0.2 ---> Using cache ---> 83a46fd8940e Step 8/9 : RUN bundle install ---> Running in 6aa522e41b65 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 ``` また、記事を貼っていただきありがとうございます。 記事どおり、bundlerのバージョンを下げる対策をしたのですが、Grmfile.lockの削除がうまくできません。 (「rm Gemfile.lock」や手動でファイルを削除してもを自動で復活します。ファイルの中身を全て消しても、記述が復活します。) やはり、焦点はこの部分になるのでしょうか。
hatsu

2020/04/04 13:20

補足情報をみると bundlerのバージョンは2.1.4ですね。 今、2.0.2で行っていますが2.1.4にするといかがでしょうか?
hatsu

2020/04/04 13: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 ```
issei1213

2020/04/04 13: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 現象として、エラー内容に変化はありませんでした。 取り急ぎ、結果をご連絡します。
issei1213

2020/04/11 04:53

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問