LoginSignup
2
0

More than 1 year has passed since last update.

[ 502エラーの解決について ] Docker Laravel8 Nginx

Posted at

502エラー発生の経緯

本来の実現したいこととしては、docker環境でローカルからアプリ画面(127.0.0.1:8000/login)にアクセスして画面表示させることでした。
その為、.envをローカル環境用に設定、migrate等を実行し、アプリ画面にアクセスするとブラウザで502 Bad Gatewayが発生!

調査

nginxが問題を起こしてる、つまりwebコンテナに何か原因がある?と判断して以下の調査をしました。

・webコンテナからログを確認
→ログがきていない。

/var/log/nginx # cat error.log
^C
/var/log/nginx # tail -f access.log
^C

・コンテナの情報確認
→webコンテナのポート番号は8000で間違いなし。

backend $ docker ps
CONTAINER ID   IMAGE                                  COMMAND                  CREATED          STATUS          PORTS                                NAMES
75f873c841cf   nginx:1.18-alpine                      "/docker-entrypoint.…"   34 minutes ago   Up 34 minutes   0.0.0.0:8000->80/tcp                 laravel-zaikokanri_web_1

・curlでアクセス確認
→コンテナ外、内どちらでやっても502が返ってくると想定していたが、コンテナ内だとポートからアクセスできないと出た。

backend $ curl http://127.0.0.1:8000/login
<html>
<head><title>502 Bad Gateway</title></head>
<body>
<center><h1>502 Bad Gateway</h1></center>
<hr><center>nginx/1.18.0</center>
</body>
</html>

//appコンテナ上でcurl
root@44bec85b6eab:/work# curl http://127.0.0.1:8000/login
curl: (7) Failed to connect to 127.0.0.1 port 8000: Connection refused

・上記のポートで接続できないエラーについて
TerminalとDocker Desktop for Macが同期されているか確認。
→同期はされているのでこちらは原因ではなかった。
参考記事:
https://kin29.info/docker%E3%81%A7localhost%E3%81%AB%E3%82%A2%E3%82%AF%E3%82%BB%E3[…]E8%A7%A3%E6%B1%BA%E3%81%97%E3%81%9F%E6%96%B9%E6%B3%95%E3%80%82/

backend $ docker-machine ls
-bash: docker-machine: command not found
backend $ env | grep DOCKER

・laravel側のログ確認
→/storage/下のディレクトリがうまく読み込めてない?

root@44bec85b6eab:/work/storage/logs# tail -n 70 laravel.log
[previous exception] [object] (ErrorException(code: 0): Trying to get property 'id' of non-object at /work/storage/framework/views/467cdeb7f738538e076e5b9450a25a2f1a0592cd.php:170)

[stacktrace]
#0 /work/storage/framework/views/467cdeb7f738538e076e5b9450a25a2f1a0592cd.php(170): Illuminate\\Foundation\\Bootstrap\\HandleExceptions->handleError(8, 'Trying to get p...', '/work/storage/f...', 170, Array)
#1 /work/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php(107): require('/work/storage/f...')
・
・
・
#57 /work/public/index.php(52): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request))
#58 {main}
"} 

・/storage/下のパスを確認
→ログに出ていた467cdeb7f738538e076e5b9450a25a2f1a0592cd.phpが/views/下に無い。

root@44bec85b6eab:/work/storage# ls
app  framework	logs

root@44bec85b6eab:/work/storage# cd framework
root@44bec85b6eab:/work/storage/framework# ls
cache  sessions  testing  views

root@44bec85b6eab:/work/storage/framework# cd views
root@44bec85b6eab:/work/storage/framework/views# ls
28cb2f865463e2e3762dd6f06692912617362439.php  6dc82b1823500a9c6c2f1e97645ae08c793bc98c.php  b3ea762d1458efe150fd9b812ad0bdd120c62243.php
46231ddce89fc639cc7622aeddfdb557006e1889.php  796bc76b9f8350b55eb11f50b70aedabbb178ef4.php  bec2fce69b216686db7b8eea0903139fd5099dd9.php
4946bdd88728158c003f26ec8998f15ee0eb44a8.php  9eb3fa105fa342374e012ac7651851c0ebe14d7c.php  fb4872a70f0e2b297c5bd136f2f76b99a9e3734d.php
69a7641f7a9123abe5851686ad7abd2a641cee84.php  a1eb93da705d3b32143cc42f584a4079a76e72d5.php

結論

結果、今回はappコンテナでcompose install実行することで解決!

root@44bec85b6eab:/work# composer install
Package manifest generated successfully.
82 packages you are using are looking for funding.
Use the `composer fund` command to find out more!

何故解決したのか

502エラーってリクエストに時間がかかり過ぎることが原因だと思い込んでいたので、何でcomposerをインストールしてサーバエラーが解決したのか?と疑問でした。。
ちなみに、composerとはPHPプログラミング言語向けのソフトウェアや必要なライブラリの依存関係を管理するパッケージです。

結論、解決できた理由は以下の通りです。

composer installはcomposerをインストールしているわけではなく、インストールしたcomposerというパッケージ管理ソフトを使って、composer.json に記載されているPHPの動作に必要なパッケージをインストールするコマンド
その為、gitでクローンした直後や何か構成変更を行った後は、composer installを実行しておかないとアプリケーションが正しく動かないようです。
そこで動作に必要なライブラリなどをダウンロードしたりしている為。

そして、

502エラー自体は単にサーバー側で何かエラーが起きてますということしかわからない状態。
今回の場合結果としてリクエストに時間がかかったように見えただけで、正しくは単純にアプリが正常に動作する状況を作れていなかったということでした。。

また、

laravel側のログに出ていた/storage/frameworkはフレームワーク(今回はlaravel)が使うフォルダで、通常開発者がいじってどうこうするフォルダではない。

つまり、ここでエラーが出ているということは、何らかの構成変更が行われたのにcomposer installが行われていない、もしくはそもそもcomposer installが行われていないのどちらかになるということでした。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0