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

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

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

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

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Ruby on Rails

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

キャッシュ

キャッシュはドキュメントやデータを一時的に保管するもので、アクセス処理時間を短くするために使用されます。

Docker

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

Q&A

1回答

5691閲覧

docker-compose up中にエラーが出て解決できませんでした。お助けください。Could not find public_suffix-4.0.6 in any of the sources

CompanySei

総合スコア0

docker-compose

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

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Ruby on Rails

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

キャッシュ

キャッシュはドキュメントやデータを一時的に保管するもので、アクセス処理時間を短くするために使用されます。

Docker

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

0グッド

0クリップ

投稿2021/04/18 11:56

編集2021/04/18 12:21

前提・実現したいこと

#docker-compose upを通したい
初投稿のため、至らない点があるかもしれないですが多めに見てもらえると幸いです。
独学でReactとRailsを学習し、ポートフォリオ制作している最中でございます。
ポートフォリオ制作で初めてDockerを使い詳細設定をした上でdocker-compose upをし、以下のエラーメッセージが発生しました。
コメントが多くて邪魔かもしれないですがよろしくお願いします。

発生している問題・エラーメッセージ

public_suffix-4.0.6が見つからない
bundle installができないと言われたので下記に書いてある4点試しました。

web_1 | Could not find public_suffix-4.0.6 in any of the sources web_1 | Run `bundle install` to install missing gems. prolist_web_1 exited with code 7

該当のソースコード

今回、私が関連すると思っている箇所を抜粋して掲載しました。

Dockerfile

# docker-compose buildすると以下が実行される FROM ruby:2.6.3 # 使用するイメージとバージョンを指定 RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs # RUN bundle config --local build.mysql2 "--with-ldflags=-L/usr/local/opt/openssl/lib" # Reactはどうするのか?? RUN mkdir /ProList WORKDIR /ProList # 作業ディレクトリ(ProList)作成と指定 COPY Gemfile /ProList/Gemfile COPY Gemfile.lock /ProList/Gemfile.lock # ホスト側のgemfileとgemfile.lockを仮想環境(ProList)にコピーする RUN bundle install # 上記のgemfileをbundle installさせる COPY . /ProList # ホスト側のディレクトリやファイルを仮想環境のProListに全てコピーする # (なぜ、gemfileとgemfile.lockのみ先にコピーするのかは疑問点である)

docker-compose.yml

version: "3" services: db: image: mysql:5.7 environment: MYSQL_USER: root MYSQL_ROOT_PASSWORD: password ports: - "3306:3306" volumes: - ./db/mysql/volumes:/var/lib/mysql # ホスト側:仮想環境側 にマウントする # (こうすることでホスト側のDBを削除しない限り、コンテナの削除をしても仮想環境のDBが消えることはない) web: build: . command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'" # rm -f tmp/pids/server.pidはサーバー起動時に作成されるらしい(これがあるとサーバー起動中と判断されるため削除する) volumes: - .:/ProList - gem_data:/usr/local/bundle ports: - 3000:3000 depends_on: - db # 起動順の制御(db => web) tty: true stdin_open: true volumes: gem_data:

Gemfile

source 'https://rubygems.org' git_source(:github) { |repo| "https://github.com/#{repo}.git" } ruby '2.6.3' # Bundle edge Rails instead: gem 'rails', github: 'rails/rails' gem 'rails', '6.0.0' # Use mysql as the database for Active Record gem 'mysql2', '0.5.3' # mimemagicを追加 gem "mimemagic", "~> 0.3.10" # Use Puma as the app server gem 'puma', '~> 3.11' # Use SCSS for stylesheets gem 'sass-rails', '~> 5' # Transpile app-like JavaScript. Read more: https://github.com/rails/webpacker gem 'webpacker', '~> 4.0' # Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks gem 'turbolinks', '~> 5' # Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder gem 'jbuilder', '~> 2.7' # Use Redis adapter to run Action Cable in production # gem 'redis', '~> 4.0' # Use Active Model has_secure_password # gem 'bcrypt', '~> 3.1.7' # Use Active Storage variant # gem 'image_processing', '~> 1.2' # Reduces boot times through caching; required in config/boot.rb gem 'bootsnap', '>= 1.4.2', require: false group :development, :test do # Call 'byebug' anywhere in the code to stop execution and get a debugger console gem 'byebug', platforms: [:mri, :mingw, :x64_mingw] end group :development do # Access an interactive console on exception pages or by calling 'console' anywhere in the code. gem 'web-console', '>= 3.3.0' gem 'listen', '>= 3.0.5', '< 3.2' # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring gem 'spring' gem 'spring-watcher-listen', '~> 2.0.0' end group :test do # Adds support for Capybara system testing and selenium driver gem 'capybara', '>= 2.15' gem 'selenium-webdriver' # Easy installation and use of web drivers to run system tests with browsers gem 'webdrivers' end # Windows does not include zoneinfo files, so bundle the tzinfo-data gem gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]

Gemfile.lock

(省略) mimemagic (0.3.10) nokogiri (~> 1) rake mini_mime (1.1.0) mini_portile2 (2.5.0) minitest (5.14.4) msgpack (1.4.2) mysql2 (0.5.3) nio4r (2.5.7) nokogiri (1.11.3) mini_portile2 (~> 2.5.0) racc (~> 1.4) public_suffix (4.0.6) puma (3.12.6) racc (1.5.2) rack (2.2.3) rack-proxy (0.6.5) rack (省略)

gem listを実行時のログ(ローカル)

nokogiri (1.11.3 x86_64-darwin, 1.11.1 x86_64-darwin, 1.10.1) openssl (default: 2.1.2) ostruct (default: 0.1.0) power_assert (1.1.3) prime (default: 0.1.0) psych (default: 3.1.0) public_suffix (4.0.6) puma (3.12.6) racc (1.5.2) rack (2.2.3) rack-proxy (0.6.5) rack-test (1.1.0) rails (6.0.3.6, 6.0.0, 5.2.4.5, 5.2.4.1)

docker-compose build --no-cacheを実行した際のログ

db uses an image, skipping Building web [+] Building 48.0s (13/13) FINISHED => [internal] load build definition from Dockerfile 0.0s => => transferring dockerfile: 37B 0.0s => [internal] load .dockerignore 0.0s => => transferring context: 2B 0.0s => [internal] load metadata for docker.io/library/ruby:2.6.3 0.0s => [internal] load build context 3.4s => => transferring context: 130.10MB 3.4s => CACHED [1/8] FROM docker.io/library/ruby:2.6.3 0.0s => [2/8] RUN apt-get update -qq && apt-get install -y build-essential li 8.1s => [3/8] RUN mkdir /ProList 0.4s => [4/8] WORKDIR /ProList 0.0s => [5/8] COPY Gemfile /ProList/Gemfile 0.0s => [6/8] COPY Gemfile.lock /ProList/Gemfile.lock 0.0s => [7/8] RUN bundle install 37.9s => [8/8] COPY . /ProList 0.3s => exporting to image 1.1s => => exporting layers 1.1s => => writing image sha256:ddeedc045664adc7ad09f878b07b7838f0cc9d6e3dbdb 0.0s => => naming to docker.io/library/prolist_web 0.0s Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them Successfully built ddeedc045664adc7ad09f878b07b7838f0cc9d6e3dbdba76e15bd0d7ce746669 Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them

docker-compose upのログ

(省略) db_1 | Version: '5.7.33' socket: '/var/run/mysqld/mysqld.sock' port: 3306 MySQL Community Server (GPL) web_1 | Could not find public_suffix-4.0.6 in any of the sources web_1 | Run `bundle install` to install missing gems. prolist_web_1 exited with code 7

試したこと

❶最初はdocker-compose buildをしていたのですがキャッシュの影響でうまくbundle installができないことがあるとのことだったのでdocker-compose build --no-cacheを実行

❷gem listでローカルでpublic_suffix-4.0.6があるのか確認

❸Gemfile.lockにpublic_suffix-4.0.6があるのか確認

❹Dockerfileの中のbundle installをbundle updateに変えてdocker-compose build --no-cacheとdocker-compose upを実行

上記4点を試し、解決せず、詰まってしまいました。

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

macOS
rails '6.0.0'

イメージ説明

![イメージ説明]

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

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

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

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

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

guest

回答1

0

検証の過程になってしまうため、想像となってしまうのですが、
docker-compose.yml のボリュームが残り続けているのが原因の可能性は無いでしょうか。

YAML

1 - .:/ProList 2 - gem_data:/usr/local/bundle

この gem_data という名前の Docker ボリュームは、--no-cache オプションを付けていても、残り続ける場所です。

確実な確認方法として、別のディレクトリに Dockerfile や docker-copmose.yml など、関連するファイルを移動して、docker-comose コマンドを実行してみてはいかがでしょう。

投稿2021/04/18 21:19

zembutsu

総合スコア1584

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

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

CompanySei

2021/04/18 23:39

おはようございます。ご回答ありがとうございます。 昨夜、寝る直前に【docker-compose run web bundle install --path vendor/bundler】を【docker-compose build --no-cache】と【docker-compose up】の前に実行し、今回のエラー自体は解消しました。解決済みに変更するのを忘れて申し訳ないです。 しかし、なぜ解決したのか原因の解明ができていないこと、ご回答をいただけたということ2点を鑑みて原因が分かるまで解決済みにせずにしておこうと思います。 ================================= >>この gem_data という名前の Docker ボリュームは、--no-cache オプションを付けていても、残り続ける場所です。 [--no-cache]とはbuildする際にキャッシュを利用せずに0からbuildするためのオプションという認識なのですが0からbuildした際に COPY Gemfile /ProList/Gemfile COPY Gemfile.lock /ProList/Gemfile.lock が実行されても過去のデータが入っていたということでしょうか? >>確実な確認方法として、別のディレクトリに Dockerfile や docker-copmose.yml など、関連するファイルを移動して、docker-comose コマンドを実行してみてはいかがでしょう。 現在のDockerfile や docker-copmose.yml 、Gemfile、Gemfile.lockはアプリケーション直下に置いているのですが、別のディレクトリとはアプリケーション内にディレクトリを作成し、その中にDockerfile や docker-copmose.ymlやGemfile、Gemfile.lockを移してdocker-comose build & upをするということでしょうか? 当たり前のことを聞いているかもしれませんが、ご回答頂けると幸いです。 仕事をしながら独学をしている身ですのでこの後のレスポンスが夜までできないかもしれません。 仕事から帰宅した後にレスポンスをするという形になると思います。申し訳ございません。
zembutsu

2021/04/19 10:34

問題が解決されていて、なによりです。 「--no-cache」はお考えのとおりですが、 正確には「Docker イメージ」の「イメージ・レイヤ」のキャッシュを使わない指定です。 「COPY」命令のイメージ・レイヤは都度作成されていますが、 おそらく影響があったのは docker-compose.yml で指定したDockerボリューム「gem_data」です。 Dockerボリュームは、キャッシュやコンテナの起動・削除に関係なく残り続ける場所です。 そのため、「--no-cache」で「イメージ・レイヤ」は再構築されたとしても 「gem_data」としてコンテナ内から見える「/usr/local/bundle」は残り続けました。 この Ruby の Dockerfile は、初期状態から環境変数 `GEM_HOME` が「/usr/local/bundle」になっています。 そのため、ビルド時にGemfileやGemfile.lockの有無(Dockerイメージにコピー)と関係無く、 作り直したつもりでも、一度作ったものが、ずっと残っていた可能性が考えられました。 質問後半の「別のディレクトリ」の意味については、ボリュームの名前を変える意味があります。 Docker Comose は doker-compose コマンドを実行した「ディレクトリ名_ボリューム名」の形式で 自動的にボリュームを作成します。 たとえば、「app1」というディレクトリで「docker-compose up」を実行しますと、 今回の「gem_data」というボリュームは、Docker エンジン側からは「app1_gem_data」というボリュームが作成されることになります。 そのため、「app2」という別のディレクトリであれば、docker-compose.yml のボリューム名指定が同じたとしても、「app2_gem_data」という別のボリュームが作成されます。結果として、全く新しいボリュームの作成を確実に行う意図がありました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問