概要
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のコネクションまで変になるとは。
散々だ。
なんなん。
コメント