##はじめに
Dockerを使ってRailsアプリケーション開発時にハマった箇所をアウトプットとして残しております。
Docker勉強中のため間違った見解があればご指摘よろしくおねがいします。
##問題
Railsサーバ(localhost:3000に設定しています)へ接続する際、サーバへアクセスできない。
なお、下記の状態のようにコンテナ起動は未起動になっている。
##状態
docker-compose up -d
でコンテナを起動時に以下の状態
$ docker-compose up -d
Starting task_jenkins_1 ... done
Starting task_db_1 ... done
Starting task_webserver_1 ... done
docker-compose ps
でコンテナの起動状態を確認
▼railsアプリケーションを立ち上げるためのtask_webserver_1のStateがExit 1(未起動)状態です
$ docker-compose ps
Name Command State Ports
----------------------------------------------------------------------------------------------
task_db_1 docker-entrypoint.sh mysqld Up 3306/tcp, 33060/tcp
task_jenkins_1 /bin/tini -- /usr/local/bi ... Up 50000/tcp, 0.0.0.0:8080->8080/tcp
task_webserver_1 bundle exec rails s -p 300 ... Exit 1
task_webserver_1
のログを確認
$ docker logs task_webserver_1
=> Booting Puma
=> Rails 5.2.2.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とは
WEB開発サーバを起動するときに書き込まれ、停止すると削除されるファイルです。
なんらかの状態でサーバを停止したのに残ってしまっていることがあると起動状態と判断されサーバが立ち上がらなくなります。
今回はこのserver.pidが書き込まれている状態のため、webserverが起動出来なくなっている為
このファイルを削除してあげれば起動ができそうです。
##対処法
▼server.pidファイルを削除
$ rm tmp/pids/server.pid
▼再度、コンテナを起動させる
$ docker-compose up -d
▼コンテナの状態を確認
$ docker-compose ps
Name Command State Ports
--------------------------------------------------------------------------------------
task_db_1 docker-entrypoint.sh mysqld Up 3306/tcp, 33060/tcp
task_jenkins_1 /bin/tini -- /usr/local/bi ... Up 50000/tcp, 0.0.0.0:8080->8080/tcp
task_webserver_1 bundle exec rails s -p 300 ... Up 0.0.0.0:3000->3000/tcp
StateがUp状態になっている為起動がされています。
Railsを起動するためのサーバにアクセスします。
成功です。