Closed naota7118 closed 3 months ago
Reason: DNS lookup failure for: rails DNS(ドメインネットワークサービス)が「rails」を探そうとして失敗した。
Apacheの設定ファイル(httpd.conf)に以下の行を追加している。(Apacheのリバースプロキシ化のため)
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
ProxyRequests Off
ProxyPass / http://rails:3000/
ProxyPassReverse / http://rails:3000/
ProxyPassの設定が間違っていて、転送先が見つからない。
ProxyPassをRailsコンテナのサービス名rails
からドメイン名ocrcheck.com
に変更した。
503エラーが返ってきた。
screenコマンドでdocker-compose upを実行している →セッション上にログが表示される。そのログを確認するには? →screenlog.0というファイルにログが出力されるらしい cat screenlog.0を実行しても何も表示されない →その前のscreenコマンドでdocker-compose upがすぐに終了してしまっている?
screen -L -dm echo RAILS_ENV=production ${SUDO_PASS} | sudo -S docker-compose -f docker-compose.yaml -f docker-compose-prod.yaml up -d --build &&
仮想端末上で実行されているのはscreen -L -dm echo RAILS_ENV=production ${SUDO_PASS}
までで、それ以降は通常のEC2インスタンス内で行われている?
そもそも仮想端末上にこだわる必要がないと考えた。
メインシェルでもコンテナの起動はデタッチモードで実行できるため。
後者のほうがdocker logs
でログも確認しやすい。
Railsコンテナのログを確認するとA server is already running
と出た。
前回起動した時のプロセスが残っていると考えられる。
docker-compose-prod.yaml
を修正した。
command: bash -c "rm -f tmp/pids/server.pid && rails assets:precompile && rails s -b 0.0.0.0"
再びRailsコンテナのログを確認すると、本番環境で実行できていないことがわかった。
=> Booting Puma
=> Rails 7.1.3.2 application starting in development
=> Run `bin/rails server --help` for more startup options
Puma starting in single mode...
* Puma version: 6.4.2 (ruby 3.3.0-p0) ("The Eagle of Durango")
* Min threads: 5
* Max threads: 5
* Environment: development
* PID: 1
* Listening on http://0.0.0.0:3000/
docker-compose-prod.yaml
でRailsコンテナに環境変数を指定した。
environment:
- RAILS_ENV=production
Apacheコンテナのログを見ると、プロキシのエラーが原因と判明。
Apacheのリバースプロキシ設定をローカルホストで指定していたが、異なるコンテナ同士を接続するにはdocker-compose.yaml
のサービス名もしくはコンテナ名で指定する必要があった。
ProxyPass / http://127.0.0.1:3000/
ProxyPassReverse / http://127.0.0.1:3000/
サービス名で指定したら解決した。
ProxyPass / http://rails:3000/
ProxyPassReverse / http://rails:3000/
当初コンテナのサービス名で指定していたにもかかわらずProxy Errorとなった原因は、おそらくscreenコマンドで仮想端末上でコンテナを起動していたため、rails
がコンテナのサービス名だと認識されなかったのだろうと考えられる。
途中で仮想端末上ではなくメインシェルでコンテナ起動したので、認識されるようになったのではないか。
Dockerで本番環境にデプロイし、
https://ocrcheck.com
にアクセスしたところ、このようなエラーが表示された。