経緯
docker-compose run up
などでコンテナを起動させると、dbは立ち上がるが、Rails(web)のほうが立ち上がらず、docker-compose ps
で起動状態を確かめると Exit 127
と表示されました。
結論
docker-compose.yml
ファイル内の文法ミス
原因
まず、なぜExit 127
という状態になるのか考えました。
最初に、dockerで終了したコンテナのログを見てみます。
xxx_db_1 docker-entrypoint.sh postgres Up 5432/tcp
xxx_web_1 entrypoint.sh bash -c rm - ... Exit 127
つぎに、xxx_web_1
のログを見てみます。
% docker logs xxx_web_1
bash: line 1: bin/rails: No such file or directory
bin/rails
というファイルやディレクトリがありません。
Dockerの設定ファイルでbin/rails
の箇所を探します。
dokcer-compose.yml
web:
build: .
command: bash -c "rm -f tmp/pids/server.pid && \
bin/rails db:create && \
bundle exec rails s -p 3000 -b '0.0.0.0'"
&&
のあとにくる\
これは何の意味があるのか。これが原因と思って、消して再度起動させてみました。
dokcer-compose.yml
command: bash -c "rm -f tmp/pids/server.pid &&
bin/rails db:create &&
bundle exec rails s -p 3000 -b '0.0.0.0'"
% docker-compose ps
Name Command State Ports
------------------------------------------------------------------------------------------
xxx_db_1 docker-entrypoint.sh postgres Up 5432/tcp
xxx_web_1 entrypoint.sh bash -c rm - ... Up 0.0.0.0:3000->3000/tcp
Rails(web)が立ち上がりました。