Laravel Sail 上でデータベースに接続できない場合の対処方法
こんにちは。 SAW です。
最近、人生で初めてなんばグランド花月に行ってきました。
吉本新喜劇を見るのは久々でしたが、年月が経っても面白いと思いました。
既存の Laravel プロジェクトで、 Sail を使ってデータベースの migration を実行したところ、 Connection refused というエラーが発生し、データベースへの接続に失敗しているようでした。
本記事では、既存のプロジェクトについて Laravel Sail 上でデータベースに接続できない場合の対処方法について紹介します。
なお、本記事では Laravel のバージョンが 10.x 系 を前提としています。
対象読者
本記事で想定する読者層は次の通りです。
- Laravel について基本的な知識を有している
- Docker について基本的な知識を有している
エラーの内容
既存の Laravel プロジェクトを clone し、 Laravel Sail を利用して migration を実行しようとしたところ、以下のようなエラーが出力されました。
Illuminate\Database\QueryException
SQLSTATE[HY000] [2002] Connection refused
(Connection: mysql, SQL: select * from information_schema.tables
where table_schema = backend and table_name = migrations
and table_type = 'BASE TABLE')
エラーメッセージを確認する限りだと、データベースに接続できていないようです。
原因
.env
の DB_HOST
の値が 127.0.0.1
になっており、 データベースの接続先が Laravel Sail の MySQL コンテナに向いていなかった ことが原因でした。
Laravel のプロジェクトを作成するとき、 .env
の雛形として .env.example
が作成されます。
特に変更を加えない場合、 .env.example
の DB_HOST
には 127.0.0.1
が設定されています。
そのため、 .env
を .env.example
からコピーして作成する場合、 DB_HOST
の値を書き換える必要があります。
解決方法
データベースの向け先を MySQL コンテナに向けるために、 .env
の DB_HOST
の値を 127.0.0.1
から mysql
に書き換えました。
DB_CONNECTION=mysql
-DB_HOST=127.0.0.1
+DB_HOST=mysql
DB_PORT=3306
上記の内容に書き換えることで、 migration が問題なく実行できるようになりました。
まとめ
本記事のまとめは以下の通りです。
- Laravel Sail 上でデータベースに接続できない場合の対処方法を紹介
-
.env
のDB_HOST
を値をmysql
に変更
-
.env.example
からコピーして .env
を作成する場合は、環境変数の設定内容をちゃんと確認しないといけないなと思いました。
参考文献
Discussion