【Docker】Laravel, Dockerで「SQLSTATE[HY000] [2002] Connection refused」

概要

LaravelプロジェクトでDockerを使用している際に、「SQLSTATE[HY000] [2002] Connection refused」というデータベース接続エラー

.envファイルのAPP_ENVをlocalからproductionに変えたりして、うまくいかないなーと色々やっているうちにDB接続エラーが出て詰んだと思った

エラーの原因

一般的な原因は、`.env`ファイルとDockerの環境変数設定が一致していないことらしい

解決策

a. `.env`ファイルの修正

まずはLaravelプロジェクトの`.env`ファイルを開き、次の設定を確認

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=your_password_here

`DB_HOST`の部分が、Dockerのデータベースコンテナの名前(またはDocker内部ネットワークのIPアドレス)と一致していることを確認。

例えば、`docker-compose.yml`ファイルでデータベースのコンテナ名が`db`の場合、`DB_HOST`を`db`に変更。

DB_HOST=db

デフォルトでDB_HOST=127.0.0.1になっていて今まで動いていたのに…えーー逆になぜ動いていた

b. Dockerコンテナの再起動

変更を反映させるために、Dockerコンテナを再起動

docker compose down
docker compose build
docker compose up -d

c. Laravelの設定のクリア

最後にLaravelの設定キャッシュをクリア

docker compose exec app bash
php artisan config:clear

まとめ

`.env`ファイルは下手に触りたくない

APP_ENVをlocalからproductionに変えて処理を分岐させたかっただけなのに。

うまくいかない上にDBのコネクションまで変になるとは。

散々だ。

なんなん。

コメント

タイトルとURLをコピーしました