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

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

ただいまの
回答率

88.93%

dockerでRuby on Railsコンテナ起動時、Could not find public_suffix-4.0.5 in any of the sources エラー

解決済

回答 1

投稿 編集

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

psc

score 11

前提・実現したいこと

dockerでRuby on Railsのアプリケーションコンテナが起動しません。

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

下記コマンド実行後、

docker-compose run web rails new . --force --no-deps --database=postgresql


最後に以下のエラーメッセージ

Could not find public_suffix-4.0.5 in any of the sources

が赤字で出ており、

docker ps -a


で確認するとアプリケーションコンテナは起動していない状態です。
(DBコンテナは起動しています)
また、マウントしているアプリ用ディレクトリにRailsのアプリケーションディレクトリやファイルができていません。

該当のソースコード

version: '3'
services:
  db:
    image: postgres
    volumes:
      - ./tmp/db:/var/lib/postgresql/data
    environment:
      POSTGRES_PASSWORD: (非表示)
  web:
    build: .
    command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    depends_on:
      - db
FROM ruby:2.7
RUN apt-get update -qq && apt-get install -y nodejs postgresql-client
RUN mkdir /myapp
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
COPY . /myapp

# Add a script to be executed every time the container starts.
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000

# Start the main process.
 CMD ["rails", "server", "-b", "0.0.0.0"]
source 'https://rubygems.org'
gem 'rails', '~>5'

試したこと

自分で調べてみたところ、
https://rubygems.org/
にバージョンがないgemだと同じメッセージが出てくることがあるということでしたが
確認したところメッセージにある public_suffix-4.0.5 というのは最新版としてしっかりリソースに存在しているようでした。

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

環境

OS:windows 10 pro
docker構成:docker desktop(デーモン) + WSL1(コマンド)

参考手順

https://docs.docker.com/compose/rails/

使用している設定ファイルはほぼ↑と同じで、Rubyのバージョンだけ2.7にしたものです。

お手数ですがどなたかお知恵をお借りできると幸いです。

追記

y_shinodaさんに追記頂いた手順でやってみたのですが、
以下のようにcreate...のログが出ておりRails newできたように一見見えたものの、
実行後/myapp にマウントしているローカルディレクトリにはプロジェクトファイルができていませんでした。
(Gemfileも最初のものから書き換わっていません)

ディレクトリのマウントがうまくいっていないのかと思い、
停止したコンテナに入って/myapp 以下をls -la してみる、
プロジェクトファイルをいくつかfindしてみるなどで探してみてもプロジェクトファイルらしきものは見当たりませんでしたので、おそらくどこかでRails new が失敗しているのでしょうか?

ログを見てもエラーは見当たらない(見逃しているだけでしたら申し訳ありません)ようなので、
何が原因かまだ自力でたどり着けておりません…。

▼ログ

Successfully tagged (アプリ名)_web:latest
WARNING: Image for service web was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
       exist  
      create  README.md
      create  Rakefile
      create  .ruby-version
      create  config.ru
      create  .gitignore
      create  Gemfile
         run  git init from "."
Initialized empty Git repository in /myapp/.git/
      create  package.json
      create  app
      create  app/assets/config/manifest.js
      create  app/assets/javascripts/application.js
      (略)
      append  .gitignore
/usr/local/bundle/gems/activesupport-5.2.4.3/lib/active_support/message_encryptor.rb:175: warning: Using the last argument 
as keyword parameters is deprecated; maybe ** should be added to the call
/usr/local/bundle/gems/activesupport-5.2.4.3/lib/active_support/messages/metadata.rb:17: warning: The called method `wrap' 
is defined here
      create  config/boot.rb
      create  config/database.yml
      create  db
     (略)
      create  storage
      create  storage/.keep
      create  tmp/storage
      create  tmp/storage/.keep
      remove  config/initializers/cors.rb
      remove  config/initializers/new_framework_defaults_5_2.rb
         run  bundle install
The dependency tzinfo-data (>= 0) will be unused by any of the platforms Bundler is installing for. Bundler is installing for ruby but the dependency is only for x86-mingw32, x86-mswin32, x64-mingw32, java. To add those platforms to the bundle, run `bundle lock --add-platform x86-mingw32 x86-mswin32 x64-mingw32 java`.
Fetching gem metadata from https://rubygems.org/............
Fetching gem metadata from https://rubygems.org/.
Resolving dependencies...
Using rake 13.0.1
Using concurrent-ruby 1.1.6
Using i18n 1.8.3
(略)
Fetching uglifier 4.2.0
Installing uglifier 4.2.0
Fetching web-console 3.7.0
Installing web-console 3.7.0
Bundle complete! 18 Gemfile dependencies, 78 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.
Post-install message from chromedriver-helper:

  +--------------------------------------------------------------------+
  |                                                                    |
  |  NOTICE: chromedriver-helper is deprecated after 2019-03-31.       |
  |                                                                    |
  |  Please update to use the 'webdrivers' gem instead.                |
  |  See https://github.com/flavorjones/chromedriver-helper/issues/83  |
  |                                                                    |
  +--------------------------------------------------------------------+

Post-install message from sass:

Ruby Sass has reached end-of-life and should no longer be used.

* If you use Sass as a command-line tool, we recommend using Dart Sass, the new
  primary implementation: https://sass-lang.com/install

* If you use Sass as a plug-in for a Ruby web framework, we recommend using the
  sassc gem: https://github.com/sass/sassc-ruby#readme

* For more details, please refer to the Sass blog:
  https://sass-lang.com/blog/posts/7828841

         run  bundle exec spring binstub --all
* bin/rake: Spring inserted
* bin/rails: Spring inserted

[2020/7/17 追記]
解決しました!

  • 最初のエラーは docker-compose down 後に解決
  • Rails newが通ったのにファイルが生成されていない問題は、WSL環境だとDocker-compose.ymlでのvolume設定でローカルディレクトリを指定するとき相対パスが使えないことに原因があったようです。絶対パスで修正したらファイル生成ができました。
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

checkベストアンサー

+1

追記

(psc さんの自己解決より、WSL であり、絶対パスにすることで解決することを受けて調査しました)

おそらく Windows 10 の Windows 17.09 以前に起因する問題のようです
Windows 10 の Windows Update を行うことでこの問題は起きなくなるようです
参考: Setting Up Docker for Windows and WSL to Work Flawlessly — Nick Janetakis

Windows 10 17.09 以前の WSL 環境で動作させるためには、
次のような方法があるようです
Docker-compose and incorrect absolute paths for volumes · Issue #1854 · microsoft/WSL

sudo mkdir /c
sudo mount --bind /mnt/c /c
cd /c/path/to/project
docker-compose ...

元の回答

今、手元で、この質問欄にある docker-compose.ymlDockerfileGemfile と、
空の Gemfile.lock, それから Quickstart にある enrtypoint.sh を使って
質問欄のコマンドを実行したところ、こちらでは正常にファイルが生成できました

ログを見たところ、rails new 自体は正常に動作しているようなので、
あとは出力されたファイルがどこにいってしまっているかだけだと思います

いずれかのファイルをこの質問欄に書いてある状態から変更していないでしょうか?
特に docker-compose.yml が怪しい気がしますが、
そこにこだわらず色々確認してみてください

コンテナを起動後、コンテナ内でrails new するということでしょうか?
手順としてはそうすると

1. docker-compose up
2. docker-compose run web rails new . --force --no-deps --database=postgresql

かと思ったのですが、1ののちアプリケーションコンテナが起動後即終了しているようです…。

rails new を行う前は docker-compose up は実行しません
rails new を実行し、Gemfile を更新してイメージをビルドし直すまでは
docker-compose up は失敗します

rails new を実行する手順

1
念のため、docker-compose down でサービスを一通りクリアします:

docker-compose down

2
docker-compose run を使い、rails new を実行します:

docker-compose run web rails new . --force --no-deps --database=postgresql

このとき、db サービスは、
web サービスが起動するより先に、自動的に起動します
web サービスの depends_on で db サービスを指定しているためです

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2020/07/15 21:43

    ありがとうございます。試してみたのですが、Rails newがうまくいっておらずGemfileが書き換わっていないようです…。
    本文に詳細追記しましたので、もしも何が悪いかおわかりでしたら度々お手数ですがご指摘いただけると幸いです。
    よろしくお願いいたします。

    キャンセル

  • 2020/07/15 22:40 編集

    今、手元で、この質問欄にある docker-compose.yml, Dockerfile, Gemfile と、
    空の Gemfile.lock, それから Quickstart にある enrtypoint.sh を使って
    回答欄の docker-compose run コマンドを実行したところ、
    こちらでは正常にファイルが生成できました

    ログを見たところ、rails new 自体は正常に動作しているようなので、
    あとは出力されたファイルがどこにいってしまっているかだけだと思います

    いずれかのファイルをこの質問欄に書いてある状態から変更していないでしょうか?
    特に docker-compose.yml が怪しい気がしますが、
    そこにこだわらず色々確認してみてください

    キャンセル

  • 2020/07/24 16:28

    WSL に関する不具合について回答欄に追記しました
    そして、質問欄をよく見れば
    最初から rails new されていたのによく確認せず回答していました、
    大変失礼しました

    キャンセル

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

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

関連した質問

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