docker-compose
で、db
とweb
の切り分け運用している方は多いらしい。(僕は長いことvagrant
だったのでよくわかりません)
友人のプロジェクトを手伝っているときに、docker-compose up
でweb
が立ち上がらないことがあったのでメモ。
問題の概要
docker-compose up
とすると、A server is already running.
というエラーが発生し、web
コンテナが正常に起動してくれない。
原因
これは、何かしらの要因によって、前回のプロセスが正常に終了しなかった場合に発生すると考えられます。
docker-compose
は、実行プロセスのPIDを<project_dir>/tmp/pids/server.pid
に書き込み、終了時に削除するという方法をとっています。
docker-compose
は、コンテナを立ち上げる際、まずこのファイルを見に行った上で、実行中のプロセスを確認します。
そのため、何かしらの要因でこのserver.pid
が削除されず残ってしまった場合、docker-compose
はこれを実行中とみなしてしまいます。
対処法
諸悪の根源であるserver.pid
を葬り去りましょう。
$ rm <project_dir>/tmp/pids/server.pid
PIDがわかる場合は、server.pidの中で該当するPIDを削除するだけで大丈夫です。