最近Railsを勉強し始めて、初めてアプリ開発をしています。
その中で謎の現象が起こったのでメモしておきます。
Version
ruby '2.5.3'
rails '5.2.3'
docker 2.1.0.0
Mac PC
概要
dockerでRailsの環境を構築して開発をしていた際に、
何らかの状態から再度コンテナを立ち上げる時、docker-compose up -d
をして
Starting meigen_db_1 ... done
Starting meigen_web_1 ... done
上記のように出るものの、docker ps
しても
a373d21eec11 mysql:5.7 "docker-entrypoint.s…" 3 days ago Up About a minute 0.0.0.0:3306->3306/tcp, 33060/tcp meigen_db_1
とDBのコンテナしか立ち上がらない。webサーバー側が立ち上がらないのだ。
docker ps -a
でみてみると
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
58a49eb1bc6f meigen_web "bundle exec rails s…" 4 seconds ago Exited (1) 2 seconds ago meigen_web_1
a373d21eec11 mysql:5.7 "docker-entrypoint.s…" 3 days ago Up 2 minutes 0.0.0.0:3306->3306/tcp, 33060/tcp meigen_db_1
STATUSがexitedになってしまっている。
調査
とりあえず、調べてみる。
docker logs <コンテナID>
A server is already running. Check /app_name/tmp/pids/server.pid.
=> Booting Puma
=> Rails 5.2.3 application starting in development
=> Run `rails server -h` for more startup options
Exiting
どうやらbundle exec rails s -p 3000 -b 0.0.0.0
を実行した時にこけてしまっているらしい。
注目はここ
A server is already running. Check /app_name/tmp/pids/server.pid.
もうすでにWebサーバーは動いているらしい。
そこで、マウントされているホスト側のファイルを確認してみると、
確かにtmp/pids/server.pid
というファイルがある。
このファイルを削除して、再度docker-compose up -d
を実行すると
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
58a49eb1bc6f meigen_web "bundle exec rails s…" 22 minutes ago Up 2 seconds 0.0.0.0:3000->3000/tcp meigen_web_1
a373d21eec11 mysql:5.7 "docker-entrypoint.s…" 3 days ago Up 3 seconds 0.0.0.0:3306->3306/tcp, 33060/tcp meigen_db_1
無事にコンテナが起動したままになりました!
これを解決するまでに原因が解らず、5回ほど環境構築し直しました。。
他の方が同じ道を辿らないことを祈ります。