Help us understand the problem. What is going on with this article?

Rails アプリケーションを Docker を使って開発する、ほとんどの人が通る(であろう)道

More than 3 years have passed since last update.

本記事は、A server is already running の対処です。これについては記事もたくさん存在していますし何も新しいことはありません。
ただ、Rails × Docker で開発する人より多くの人に見てもらえることを目的として書きました。
Rails の A server is already running と聞いて「ああ、あれのことか」と思った方は本記事は読み飛ばしてください。

docker-compose.yml

db:
  image: postgres
web:
  build: .
  # コンテナ立ち上げ時に開発用サーバを起動
  command: bundle exec rails s -p 3000 -b '0.0.0.0'
  volumes:
    - .:/myapp
  ports:
    - "3000:3000"
  links:
    - db

A server is already running.

コンテナを立ち上げますが、失敗しています。

$ docker-compose up -d
$ docker-compose ps
        Name                       Command               State     Ports
--------------------------------------------------------------------------
railsprojectdocker_db_1    /docker-entrypoint.sh postgres   Up       5432/tcp
railsprojectdocker_web_1   bundle exec rails s -p 300 ...   Exit 1

以下のコマンドでログを確認します。

$ docker-compose logs
~
web_1 | => Booting WEBrick
web_1 | => Rails 4.2.4 application starting in development on http://0.0.0.0:3000
web_1 | => Run `rails server -h` for more startup options
web_1 | => Ctrl-C to shutdown server
web_1 | A server is already running. Check /myapp/rails-app/tmp/pids/server.pid.
web_1 | Exiting

問題と対処

Rails に付随しているWEBサーバが正常に終了していない。
docker-compose kill や 何かの拍子でコンテナが終了すると起きてしまいます。

server.pid に pid の情報が保持されたまま終了

pid は、開発用WEBサーバを起動するときに tmp/pids/server.pidに書き込まれ、終了するときに削除されます。
server.pid に pid が書かれていると開発用WEBサーバが起動中(プロセスがある)と判断されてしまいます。

pid の情報を削除

server.pid に書かれた pidを削除する、もしくはserver.pidを削除します。
server.pid を削除しても、rails serverを実行した時に自動で作成されます。

$ rm railsproject-ui/tmp/pids/server.pid
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away