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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

Docker

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

Q&A

解決済

1回答

2521閲覧

docker-compose upの際「exited with code 7」で停止する

workr

総合スコア158

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

Docker

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

0グッド

0クリップ

投稿2018/06/14 04:09

編集2018/06/14 08:30

docker for windows を使って Ruby on Rails のローカル環境を構築しようとしています。
docker-compose の build が正常に完了し、up してみたところ、「exited with code 7」と表示され停止しました。

ログには赤い文字でCould not find public_suffix-0.3.2 in any of the sourcesとあったのでGemfileに'public_suffix', '3.0.2'を追記し再度build, up してみたところ今度はCould not find addressable-2.5.2 in any of the sourcesというエラーで停止しました。

同様に追記して試すと、Could not find io-like-0.3.0 in any of the sourcesとなって同じ作業の繰り返しになります。

インストールしようしている何かのバージョンが新しすぎるのか何らかのコマンドで一括で最新版に更新できるのかよくわかりません。

現状のファイルはおおむね次のとおりです。

yml

1version: '3' 2 3services: 4 web: 5 build: ./web 6 command: bundle exec rails s -p 3000 -b 0.0.0.0 7 ports: 8 - '3000:3000' 9 volumes: 10 - ./app:/app 11 stdin_open: true 12 tty: true

web/Dockerfile

FROM ruby:2.5 RUN apt-get update -qq && apt-get install -y build-essential mysql-client nodejs RUN mkdir /app WORKDIR /app ADD Gemfile /app/Gemfile ADD Gemfile.lock /app/Gemfile.lock RUN bundle install ADD . /app

Gemfile

source 'https://rubygems.org' gem 'rails', '5.2.0' gem 'mysql2' gem 'public_suffix', '3.0.2' gem 'addressable', '2.5.2'

dockerやruby自体不慣れであまり理解しきれていない状態です。どこかおかしなところがあるのでしょうか?
よろしくお願いいたします。


追記

フォルダ階層は次のとおりです

text

1app/ Ruby on Rails がインストールされています 2db/ MySQL永続化のためのデータです 3web/ Dockerfile, Gemfile, Gemfile.lock が格納されています 4docker-compose.yml

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

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

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

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

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

guest

回答1

0

ベストアンサー

Ruby/Railsに不慣れであれば自分でGemfileを書いて差し込むよりrails newで生成する方がいいと思います。
過去に作ったことのあるRailsのDockerfileを貼っておきます。
個人的な趣味でdebianでなくalpineイメージですが・・・

Dockerfile

1FROM ruby:2.5-alpine 2 3# install packages 4RUN apk add -U --no-cache bash git 5 6# install imagemagick6-dev for rmagick 7# rmagickを使う場合 8# RUN apk add --no-cache imagemagick6-dev 9 10# install bundler 11RUN gem install bundler 12 13# install rails 14RUN apk add --no-cache libxml2-dev libxslt-dev libstdc++ tzdata mariadb-client-libs nodejs \ 15 ca-certificates build-base mariadb-dev ruby-dev sqlite sqlite-dev mysql-dev 16RUN gem install rails -v 5.2.0 --no-rdoc --no-ri 17 18# create rails project 19RUN rails new myproject -d mysql --bundle-skip 20WORKDIR /myproject 21# DB接続設定を挿入する場合 22# COPY database.yml config 23RUN bundle install --jobs=4 --path=vendor/bundle 24 25CMD rails s -b 0.0.0.0

追記

volumesをコメントアウトすると正常に起動し、ブラウザには「Can't connect to local MySQL server through socket '/run/mysqld/mysqld.sock'」というエラーが表示されていますが、これはRailsのエラー画面に見えるので成功しているようです。

仰る通りです。これはmysqlに接続すれば治るエラーなので大丈夫です。

alpine側にRailsがインストールされているようですがvolumesを外したのとADDをしていないのでローカル側のappフォルダは空の状態です。

仰る認識の通りです。
コンテナ起動→ボリュームマウントの順序で処理されるのでホスト側ボリュームが空だとコンテナ側も空になり、動きません。

RubyMineなどでのリモートデバッグ(?)が前提になるのでしょうか?

いえ、そんなことはありません。

色々方法はあるのですが、要はボリュームマウント時にホスト側にアプリケーションのソースが用意されている必要があるわけです。
私の Dockerfile を前提として説明します。
まず次のコマンドを順に実行して下さい。

bash

1docker build -t myrailsimage ./web # webディレクトリにrailsのDockerfileがある場合 2docker run -d --rm --name myrailscontainer myrailsimage 3docker cp myrailsimage:/myproject ./myproject 4docker stop myrailscontainer

これでコンテナのrailsソースをホスト側に持ってこれます。

docker-compose.yml も合わせます。

volumes: - ./myproject:/myproject

この状態で docker-compose up を試してみて下さい。

私はMacユーザのため、Windowsの場合勝手が違う部分を含む可能性はありますが、ご留意下さい。

投稿2018/06/14 04:43

編集2018/06/15 04:21
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

workr

2018/06/14 07:49

回答有り難うございます。教えていただいたDockerfileの myproject の名前だけ変更して使ってみたのですが、buildには成功したもののupの際に「Could not find rake-12.3.1 in any of the sources」エラーが起き、exited with code 7で停止してしまいました。 buildの段階では「Installing rake 12.3.1」というログが残っているのですが何が原因と考えられるでしょうか?
退会済みユーザー

退会済みユーザー

2018/06/14 12:05

あれ、そうでしたか。ちょっとこちらでも動作確認してみますのでお待ち下さい。
退会済みユーザー

退会済みユーザー

2018/06/14 12:46

こちらの環境で試したところ大丈夫でした。一度docker-compose.ymlのvolumesを削除するかコメントアウトして試してみて下さい。
workr

2018/06/15 03:11

御返事ありがとうございます。「build --no-cache」を試したところログ上のエラーはなくなりましたが「exited with code 0」で停止するように変化しました。 volumesをコメントアウトすると正常に起動し、ブラウザには「Can't connect to local MySQL server through socket '/run/mysqld/mysqld.sock'」というエラーが表示されていますが、これはRailsのエラー画面に見えるので成功しているようです。 alpine側にRailsがインストールされているようですがvolumesを外したのとADDをしていないのでローカル側のappフォルダは空の状態です。RubyMineなどでのリモートデバッグ(?)が前提になるのでしょうか? フォルダ階層が怪しい気がするので追記に構造を記述しました。もしなにかお気付きの点がありましたらよろしくお願いいたします。
退会済みユーザー

退会済みユーザー

2018/06/15 04:22

ご報告頂いた内容は私の想定通りですので、ボリュームマウントした上で動かす方法を追記致しました。
workr

2018/06/15 05:56 編集

教えていただいた方法でローカルのプロジェクトフォルダと同期させることができました。詳細な解説ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問