67245


docker-compose で Rails のコンテナを立てたいのですが  
docker-compose の管理リポジトリと Rails のリポジトリを別で管理していて  
人によって Gemfile のパスが固定できないので  
<https://docs.docker.com/compose/rails/>  
のように  
ADD ./Gemfile  
ができません

なのでとりあえず ruby 関連のミドルウェアだけインストールした状態でコンテナを起動して  
bundle install や rails の起動はコンテナに入ってから行うことにしたいのですが  
ベースにした ubuntu のコンテナが UP のままになってくれずコンテナに入ることができません

同時にたてた MySQL の方は何もしなくても UP になってくれるので  
初めから用意されてるテンプレートイメージの方に違いがあるとしか思えないのですが  
どういう条件で UP になり続けるのでしょうか

[code]

    d59848956e1a        rails                           "/bin/bash"              5 seconds ago        Restarting (0) 1 second ago                                                     rails
    565825adef28        mysql                           "docker-entrypoint.s…"   6 seconds ago        Up 5 seconds                    0.0.0.0:3307->3306/tcp                          mysql
    
[/code]

試しに Dockerfile をそれぞれ

[code]

    FROM ubuntu:14.04
    
[/code]

[code]

    FROM mysql:5.6
    
[/code]

とだけ書いて以下のような docker-compose で command や volume をコメントアウトして  
全く同じ条件で build に各 Dockerfile の場所を指定して実行した結果  
上記の docker ps のように MySQL の方だけが UP になります

[code]

      rails:
        build: Dockerfiles/rails/
        image: rails
        container_name: rails
    #    command: rails s -p 3000 -b '0.0.0.0'
    #    volumes:
    #     - ~/git/rails/:/home/git/rails/:z
    #     - ~/.aws/:/root/.aws/:z
        ports:
         - "3003:3000"
        links:
         - mysql
        networks:
          rails_net:
            ipv4_address: 172.20.1.2
        restart: always
    
      mysql:
        build: Dockerfiles/mysql/
        image: mysql
        container_name: mysql
        ports:
         - "3307:3306"
        networks:
          rails_net:
            ipv4_address: 172.20.1.3
        restart: always
    
[/code]

* * *

質問ではなぜ UP にならないか調べるために最低限の状態で動かそうとしてますが  
最終的には以下のような Dockerfile で構築しようと考えています

[code]

    FROM ubuntu:14.04
    
    # 必要なパッケージのインストール（基本的に必要になってくるものだと思うので削らないこと）
    RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs git curl libreadline-dev
    
    RUN git clone https://github.com/rbenv/rbenv.git ~/.rbenv
    RUN echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
    RUN echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
    ENV PATH /root/.rbenv/shims:/root/.rbenv/bin:$PATH
    RUN git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
    RUN ~/.rbenv/bin/rbenv install 2.5.1
    RUN ~/.rbenv/bin/rbenv global 2.5.1
    RUN gem install bundler -v "1.16.2"
    
    # 作業ディレクトリの作成、設定
    # RUN mkdir -p /home/git
    ##作業ディレクトリ名をAPP_ROOTに割り当てて、以下$APP_ROOTで参照
    # ENV APP_ROOT /home/git/rails
    # 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]

* * *

docker logs では何も表示されませんでした

* * *

ベースのイメージを ruby:2.5.1 に変更してみたのですがやはり UP になりません  
実行コマンドは以下

[code]

    # docker-compose up -d --build
    Building mysql
    Step 1/1 : FROM mysql:5.6
     ---> 9e4a20b3bbbc
    Successfully built 9e4a20b3bbbc
    Successfully tagged mysql:latest
    Building rails
    Step 1/1 : FROM ruby:2.5.1
    2.5.1: Pulling from library/ruby
    bc9ab73e5b14: Already exists
    193a6306c92a: Already exists
    e5c3f8c317dc: Already exists
    a587a86c9dcb: Already exists
    72744d0a318b: Already exists
    31d57ef7a684: Already exists
    a2a726425592: Already exists
    4f2f2375eda7: Already exists
    Digest: sha256:ac6661b87cf49af14b193024f28ef223b529974bdfab58f5e8d4df37a8bdbc9d
    Status: Downloaded newer image for ruby:2.5.1
     ---> 3c8181e703d2
    Successfully built 3c8181e703d2
    Successfully tagged rails:latest
    mysql is up-to-date
    Starting rails ... done
    
    # docker ps
    CONTAINER ID        IMAGE                               COMMAND                  CREATED             STATUS                          PORTS                                           NAMES
    95939d77b103        rails                           "irb"                    7 minutes ago       Restarting (0) 40 seconds ago                                                   rails
    606f8fc24dcf        mysql                           "docker-entrypoint.s…"   2 days ago          Up 49 minutes                   0.0.0.0:3307->3306/tcp                          mysql
    
[/code]

と COMMAND のところが irb に変わっています

[code]

    # docker logs 95939d77b103
    Switch to inspect mode.
    
    Switch to inspect mode.
    
    Switch to inspect mode.
    :
    
[/code]

というのが延々と表示されるようになりました

[code]

    # docker logs 606f8fc24dcf
    
[/code]

の方はいろんなログがたくさん出てきます


CC BY-SA 4.0
2020-05-22T08:51:37.120
66881
2020-06-03T02:28:54.393
2020-05-25T00:57:04.800
question
docker docker-compose
docker ps で STATUS が UP になる条件


まずはRails側のDockerfileをRailsが起動できる状態に持っていく必要があります。

例えばRailsを動かすためのDockerfileは次のページにサンプルが載っています。

  * <https://docs.docker.com/compose/rails/>

KTIさんのRailsのDockerfileは

[code]

    FROM ubuntu:14.04
    
[/code]

と書いてありますから、上のリンクのサンプルと比較して不足しているパッケージがたくさんあると思います。  
ここから初めてみましょう。

また、コンテナが起動しない場合や、コンテナが途中で停止した場合はコンテナIDからログを取得し、停止した原因を探ってみると良いでしょう。  
質問にある例の場合、`d59848956e1a`がrailsのコンテナですから、

[code]

    docker logs d59848956e1a
    
[/code]

と打ち込めばなぜ起動しないかのログが書いてあるので、調査してみましょう。

## 追記（05/25 10:20）

> COMMAND のところが irb に変わっています

次のコマンドを入力して、Docker起動時に実行されるコマンドを確認してみてください。おそらくirbになっているかと思います。

[code]

    docker inspect --format='{{.Config.Cmd}}' [railsのContainer ID]
    
[/code]

これはdocker-
compose.ymlにおいて`command`をコメントアウトしたため、もとのイメージのコマンドが実行されていると考えられます。rails起動コマンドに変えるにはコメントアウトした箇所をもとに戻してください。（以下例）

[code]

    rails:
      command: rails s -p 3000 -b '0.0.0.0'
    
[/code]

この状態で`docker-compose up`を実行して、railsのlogsを確認してみてください。


CC BY-SA 4.0
2020-05-22T11:29:06.273
66886
2020-05-25T01:23:24.663
2020-05-25T01:23:24.663
7997
7997
66881
answer


context というのを指定することで  
無理やり Rails ツリーの中に docker-compose のパスを埋め込んで  
Gemfile をコピーしてマイグレーション実行までやったら 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:28:54.393
67245
2020-06-03T02:28:54.393
66881
answer