67244


稼働中の Rails の開発環境を docker で構築したいです

<https://qiita.com/azul915/items/5b7063cbc80192343fc0>

こちらを参考にして以下のような Dockerfile と  
docker-compose.yml に他の動いているコンテナの設定を真似て書いて

Gemfile をコピーする代わりに docker-composer の volumes でホストの rails リポジトリごとマウントをしてみたのですが

docker-compose up -d を実行したところ

`ERROR: Service 'rails' failed to build: The command '/bin/sh -c bundle
install' returned a non-zero code: 10`

というエラーが出てしまいます

[code]

    RUN bundle install > bundle.log
    
[/code]

のように書いてもログファイルも作成されません

[code]

        volumes:
          - ~/git/rails/:/app_name/:z
    
[/code]

の設定でホストの ~/git/rails/Gemfile が  
/app_name/Gemfile で参照できると思ってるんですがそうではないんでしょうか

ホストの ~/git/rails に Rails のプロジェクトルートがあって  
直下に Gemfile は存在し、ローカルでは ruby 2.5.1 で bundle install が成功します

[code]

    # コピペでOK, app_nameもそのままでOK
    # 19.01.20現在最新安定版のイメージを取得
    FROM ruby:2.5.1
    
    # 必要なパッケージのインストール（基本的に必要になってくるものだと思うので削らないこと）
    RUN apt-get update -qq && \
        apt-get install -y build-essential \ 
                           libpq-dev \        
                           nodejs           
    
    # 作業ディレクトリの作成、設定
    RUN mkdir /app_name
    ##作業ディレクトリ名をAPP_ROOTに割り当てて、以下$APP_ROOTで参照
    ENV APP_ROOT /app_name 
    WORKDIR $APP_ROOT
    
    # ホスト側（ローカル）のGemfileを追加する（ローカルのGemfileは【３】で作成）
    # ADD ./Gemfile $APP_ROOT/Gemfile
    # ADD ./Gemfile.lock $APP_ROOT/Gemfile.lock
    
    # Gemfileのbundle install
    RUN bundle install
    ADD . $APP_ROOT
    
[/code]

[code]

    version: '2'
    services:
      rails:
        build: ./rails/
        image: rails
        container_name: rails
        command: rails s -p 3000 -b '0.0.0.0'
        volumes:
          - ~/git/rails/:/app_name/:z
          - ~/.aws/:/root/.aws/:z
        ports:
          - "3000:3000"
        networks:
          rails_net:
            ipv4_address: 172.20.1.2
        restart: always
    
[/code]

* * *

また Dockerfile の bundle install の行と  
docker-compose.yml の rails 起動行をコメントアウトすると  
コンテナの作成には成功するんですが

docker ps を実行すると STATUS がずっと  
`Restarting (0) 27 seconds ago`  
となって数十秒おきに再起動を繰り返してしまい

[code]

    docker exec -it rails /bin/bash
    
[/code]

も実行できません

とりあえず rails 起動や bundle install は手動でコンテナ内でやることにして  
ruby コンテナを docker-compose から起動して中に入れる状態にまず持っていきたいのですが  
どこが悪いのでしょうか


CC BY-SA 4.0
2020-05-21T10:22:13.520
66841
2020-06-03T02:26:58.857
2020-05-22T07:58:12.267
question
ruby-on-rails ruby docker docker-compose
ruby コンテナ上にログインする方法


`bundle install`のエラーコード10は、`Could not locate
Gemfile`で、`Gemfile`が見つからないというエラーのようです。（`Gemfile`がない場所で`bundle
install`を実行後、`echo $?`とすると、対応するエラーコードが10であることが確認できます。）  
また、元記事の`Dockerfile`と比較して見てみると、`Gemfile`と`Gemfile.lock`をdocker内に取り込む、

[code]

    # ADD ./Gemfile $APP_ROOT/Gemfile
    # ADD ./Gemfile.lock $APP_ROOT/Gemfile.lock
    
[/code]

がこのようにコメントアウトされていますので、これが原因と思われます。

[code]

    ADD ./Gemfile $APP_ROOT/Gemfile
    ADD ./Gemfile.lock $APP_ROOT/Gemfile.lock
    
[/code]

とコメントアウトを外せば`bundle install`のエラーは直ると思います。  
これでもエラーが変わらなければ、`Dockerfile`と`Gemfile`と`Gemfile.lock`と`docker-
compose.yml`が同じディレクトリにあるかを確認してください。同じディレクトリになければ、`Dockerfile`と`docker-
compose.yml`を`Gemfile`と同じ場所に移動し、そこで`docker-compose up -d`を実行してみてください。

* * *

2020/05/22 追記  
そのまま使って立ち上げるなら、先にカレント一式をADDしないと`Gemfile`などがアクセスできないと思いますので、

[code]

    # Gemfileのbundle install
    ADD . $APP_ROOT
    RUN bundle install
    
[/code]

と入れ替えれば動きそうです。  
ただ、元記事がこうしていない理由はよくわかりませんでした。


CC BY-SA 4.0
2020-05-21T15:16:31.800
66846
2020-05-22T11:31:29.543
2020-05-22T11:31:29.543
7900
7900
66841
answer


rails コマンドを起動できなかった原因は  
初回マイグレーションを実行してなかったせいでした

ただ質問で本当にやりたかったことはこちらの質問で解決できました

[docker で Rails
を動かしてリアルタイムで標準出力をみたい](https://ja.stackoverflow.com/questions/67226/docker-%e3%81%a7-rails-%e3%82%92%e5%8b%95%e3%81%8b%e3%81%97%e3%81%a6%e3%83%aa%e3%82%a2%e3%83%ab%e3%82%bf%e3%82%a4%e3%83%a0%e3%81%a7%e6%a8%99%e6%ba%96%e5%87%ba%e5%8a%9b%e3%82%92%e3%81%bf%e3%81%9f%e3%81%84)


CC BY-SA 4.0
2020-06-03T02:26:58.857
67244
2020-06-03T02:26:58.857
66841
answer