記事の目的
railsのコンテナをdocker-composeで立ち上げる際に発生したコンテナが起動しない問題に対しての対処法を共有すること。
状況
$ docker-compose up -d
でコンテナを立ち上げる。
$ docker-compose up -d
rails_db_1 is up-to-date
Starting rails_web_1 ... done
$ docker-compose ps
で現在のコンテナの中身を確認したところ、
$ docker-compose ps
Name Command State Ports
------------------------------------------------
rails_db_1 docker-entr Up 3306/tcp,
ypoint.sh 33060/tcp
mysqld
rails_web_1 bundle exec Exit 1
rails s -p
300 ...
対処法
$ docker logs rails_web_1
でlogを確認。
$ docker logs rails_web_1
=> Booting Puma
=> Rails 5.0.0.1 application starting in development
=> Run `rails server -h` for more startup options
A server is already running. Check /app/tmp/pids/server.pid.
Exiting
すると、「もうすでにサーバーは起動しているよ、
/app/tmp/pids/server.pid.を確認してね。」と言っている。
server.pid.について
これは、サーバを起動するときに書き込まれ、
$ docker-compose down
などのコマンドでサーバを停止した際に残ってしまっていることがあるファイル。
これがあるともう一度起動したくても、起動状態と判断されサーバが立ち上がらなくなる。
よってこのファイルを削除すると起動ができる。
$ rm tmp/pids/server.pid
で削除。
もう一度立ち上げてコンテナを確認
$ docker-compose up -d
rails_db_1 is up-to-date
Starting rails_web_1 ... done
$ docker-compose ps
Name Command State Ports
------------------------------------------------
rails_db_1 docker-entry Up 3306/tcp,
point.sh 33060/tcp
mysqld
rails_web_1 bundle exec Up 0.0.0.0:300
rails s -p 0->3000/tcp
300 ...
Stateを確認すると起動していることが確認できる。
終わりに
コンテナを削除する際にserver.pid.が残ってしまう時は、 rm tmp/pids/server.pid
で削除すればコンテナを起動することができる。
dockerを使いたての初心者がよく陥りやすいミスなので覚えておくと得。