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

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

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

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

WSL(Windows Subsystem for Linux)

WSL (Windows Subsystem for Linux) は、Windows10のOS上でLinux向けのバイナリプログラムを実行可能にする機能です。また、WindowsOSのAPIを用いた仕組みを提供しており、Linux側からWindowsOSへのファイルアクセスもできます。

Ruby on Rails

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

Docker

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

Q&A

解決済

1回答

2115閲覧

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

psc

総合スコア11

docker-compose

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

WSL(Windows Subsystem for Linux)

WSL (Windows Subsystem for Linux) は、Windows10のOS上でLinux向けのバイナリプログラムを実行可能にする機能です。また、WindowsOSのAPIを用いた仕組みを提供しており、Linux側からWindowsOSへのファイルアクセスもできます。

Ruby on Rails

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

Docker

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

0グッド

0クリップ

投稿2020/07/12 12:50

編集2020/07/17 14:10

前提・実現したいこと

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

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

下記コマンド実行後、

bash

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

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

Could not find public_suffix-4.0.5 in any of the sources

が赤字で出ており、

bash

1docker ps -a

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

該当のソースコード

Dockercomposeyml

1version: '3' 2services: 3 db: 4 image: postgres 5 volumes: 6 - ./tmp/db:/var/lib/postgresql/data 7 environment: 8 POSTGRES_PASSWORD: (非表示) 9 web: 10 build: . 11 command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'" 12 volumes: 13 - .:/myapp 14 ports: 15 - "3000:3000" 16 depends_on: 17 - db

Dockerfile

1FROM ruby:2.7 2RUN apt-get update -qq && apt-get install -y nodejs postgresql-client 3RUN mkdir /myapp 4WORKDIR /myapp 5COPY Gemfile /myapp/Gemfile 6COPY Gemfile.lock /myapp/Gemfile.lock 7RUN bundle install 8COPY . /myapp 9 10# Add a script to be executed every time the container starts. 11COPY entrypoint.sh /usr/bin/ 12RUN chmod +x /usr/bin/entrypoint.sh 13ENTRYPOINT ["entrypoint.sh"] 14EXPOSE 3000 15 16# Start the main process. 17 CMD ["rails", "server", "-b", "0.0.0.0"]

Gemfile

1source 'https://rubygems.org' 2gem '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 が失敗しているのでしょうか?

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

▼ログ

consolelog

1Successfully tagged (アプリ名)_web:latest 2WARNING: 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`. 3 exist 4 create README.md 5 create Rakefile 6 create .ruby-version 7 create config.ru 8 create .gitignore 9 create Gemfile 10 run git init from "." 11Initialized empty Git repository in /myapp/.git/ 12 create package.json 13 create app 14 create app/assets/config/manifest.js 15 create app/assets/javascripts/application.js 16 (略) 17 append .gitignore 18/usr/local/bundle/gems/activesupport-5.2.4.3/lib/active_support/message_encryptor.rb:175: warning: Using the last argument 19as keyword parameters is deprecated; maybe ** should be added to the call 20/usr/local/bundle/gems/activesupport-5.2.4.3/lib/active_support/messages/metadata.rb:17: warning: The called method `wrap' 21is defined here 22 create config/boot.rb 23 create config/database.yml 24 create db 25 (略) 26 create storage 27 create storage/.keep 28 create tmp/storage 29 create tmp/storage/.keep 30 remove config/initializers/cors.rb 31 remove config/initializers/new_framework_defaults_5_2.rb 32 run bundle install 33The 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`. 34Fetching gem metadata from https://rubygems.org/............ 35Fetching gem metadata from https://rubygems.org/. 36Resolving dependencies... 37Using rake 13.0.1 38Using concurrent-ruby 1.1.6 39Using i18n 1.8.3 40(略) 41Fetching uglifier 4.2.0 42Installing uglifier 4.2.0 43Fetching web-console 3.7.0 44Installing web-console 3.7.0 45Bundle complete! 18 Gemfile dependencies, 78 gems now installed. 46Use `bundle info [gemname]` to see where a bundled gem is installed. 47Post-install message from chromedriver-helper: 48 49 +--------------------------------------------------------------------+ 50 | | 51 | NOTICE: chromedriver-helper is deprecated after 2019-03-31. | 52 | | 53 | Please update to use the 'webdrivers' gem instead. | 54 | See https://github.com/flavorjones/chromedriver-helper/issues/83 | 55 | | 56 +--------------------------------------------------------------------+ 57 58Post-install message from sass: 59 60Ruby Sass has reached end-of-life and should no longer be used. 61 62* If you use Sass as a command-line tool, we recommend using Dart Sass, the new 63 primary implementation: https://sass-lang.com/install 64 65* If you use Sass as a plug-in for a Ruby web framework, we recommend using the 66 sassc gem: https://github.com/sass/sassc-ruby#readme 67 68* For more details, please refer to the Sass blog: 69 https://sass-lang.com/blog/posts/7828841 70 71 run bundle exec spring binstub --all 72* bin/rake: Spring inserted 73* bin/rails: Spring inserted

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

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

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

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

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

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

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

guest

回答1

0

ベストアンサー

追記

(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

console

1sudo mkdir /c 2sudo mount --bind /mnt/c /c 3cd /c/path/to/project 4docker-compose ...

元の回答

今、手元で、この質問欄にある docker-compose.yml, Dockerfile, Gemfile と、
空の 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 でサービスを一通りクリアします:

console

1docker-compose down

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

console

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

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

投稿2020/07/12 13:22

編集2020/07/24 07:27
y_shinoda

総合スコア3272

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

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

psc

2020/07/13 13:05

ご回答ありがとうございます。 コンテナを起動後、コンテナ内でrails new するということでしょうか? 手順としてはそうすると 1. docker-compose up 2. docker-compose run web rails new . --force --no-deps --database=postgresql かと思ったのですが、1ののちアプリケーションコンテナが起動後即終了しているようです…。 ``` (コンテナ名) exited with code 1 ``` https://logicoffee.hatenablog.com/entry/2018/06/26/195502 こちらに対処法が載っていたのですが、ローカルにそのようなファイルはできていないので削除もできないという状態です。 (なお、この手順を試す際にはコンテナもイメージも削除して都度やり直しています。) なんだか別の問題も出てきているようで恐縮ですが、もし手順の解釈から違うようであればご指摘いただけますと幸いです。 度々申し訳ありません。 よろしくお願いいたします。
y_shinoda

2020/07/13 13:28

追記しました、ご確認おねがいします
psc

2020/07/15 12:43

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

2020/07/15 15:34 編集

今、手元で、この質問欄にある docker-compose.yml, Dockerfile, Gemfile と、 空の Gemfile.lock, それから Quickstart にある enrtypoint.sh を使って 回答欄の docker-compose run コマンドを実行したところ、 こちらでは正常にファイルが生成できました ログを見たところ、rails new 自体は正常に動作しているようなので、 あとは出力されたファイルがどこにいってしまっているかだけだと思います いずれかのファイルをこの質問欄に書いてある状態から変更していないでしょうか? 特に docker-compose.yml が怪しい気がしますが、 そこにこだわらず色々確認してみてください
y_shinoda

2020/07/24 07:28

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問