Laravel SailのDB接続についてデフォルトの状態でいろいろエラー出たのでメモ
プロジェクト立ち上げ直後のDB接続に関する情報
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=select2_and_auto_zip_example DB_USERNAME=root DB_PASSWORD=
mysql: image: 'mysql:8.0' ports: - '${FORWARD_DB_PORT:-3306}:3306' environment: MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}' MYSQL_DATABASE: '${DB_DATABASE}' MYSQL_USER: '${DB_USERNAME}' MYSQL_PASSWORD: '${DB_PASSWORD}' MYSQL_ALLOW_EMPTY_PASSWORD: 'yes' volumes: - 'sailmysql:/var/lib/mysql' networks: - sail healthcheck: test: ["CMD", "mysqladmin", "ping", "-p${DB_PASSWORD}"] retries: 3 timeout: 5s
エラー① マイグレート実行時にConnection refusedって出る
上記接続設定でコンテナを起動したところ、mysqlコンテナだけ即落ちしました。
以下のエラーを確認。
Illuminate\Database\QueryException SQLSTATE[HY000] [2002] Connection refused (SQL: select * from information_schema.tables where table_schema = select2_and_auto_zip_example and table_name = migrations and table_type = 'BASE TABLE')
参考:php – Laravel Sail Database Connection Refused Error – Stack Overflow
上記参考情報の通りDB_HOSTを127.0.0.1からmysqlに変更することで解決できました。
DB_CONNECTION=mysql -DB_HOST=127.0.0.1 +DB_HOST=mysql DB_PORT=3306 DB_DATABASE=select2_and_auto_zip_example DB_USERNAME=root DB_PASSWORD=
エラー② 環境変数云々のエラーが出る
エラー①解決の後、依然としてmysqlコンテナが即落ちするのでエラーを確認。
[ERROR] [Entrypoint]: MYSQL_USER="root", MYSQL_USER and MYSQL_PASSWORD are for configuring a regular user and cannot be used for the root user Remove MYSQL_USER="root" and use one of the following to control the root user password: - MYSQL_ROOT_PASSWORD - MYSQL_ALLOW_EMPTY_PASSWORD - MYSQL_RANDOM_ROOT_PASSWOR
なんかいろいろ書いてありますが、MYSQL_ROOT_PASSWORDを設定してるときにMYSQL_USER=”root”は使えませんってことみたい??
指示通りに削除
mysql: image: 'mysql:8.0' ports: - '${FORWARD_DB_PORT:-3306}:3306' environment: MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}' MYSQL_DATABASE: '${DB_DATABASE}' - MYSQL_USER: '${DB_USERNAME}' MYSQL_PASSWORD: '${DB_PASSWORD}' MYSQL_ALLOW_EMPTY_PASSWORD: 'yes' volumes: - 'sailmysql:/var/lib/mysql' networks: - sail healthcheck: test: ["CMD", "mysqladmin", "ping", "-p${DB_PASSWORD}"] retries: 3 timeout: 5s
この状態でmysqlコンテナが起動できるようになりました。
起動後の確認
マイグレートが通ることを確認
$ vendor/bin/sail exec laravel.test php artisan migrate Migration table created successfully. Migrating: 2014_10_12_000000_create_users_table Migrated: 2014_10_12_000000_create_users_table (93.51ms) Migrating: 2014_10_12_100000_create_password_resets_table Migrated: 2014_10_12_100000_create_password_resets_table (150.97ms) Migrating: 2019_08_19_000000_create_failed_jobs_table Migrated: 2019_08_19_000000_create_failed_jobs_table (204.72ms) Migrating: 2019_12_14_000001_create_personal_access_tokens_table Migrated: 2019_12_14_000001_create_personal_access_tokens_table (116.27ms)
ローカルのMySQLクライアント(MySQL Workbench 8.0)から接続できることを確認
接続設定作成 | マイグレートできてることを確認 |
その他
最初、WSL2セットアップ&Ubuntu-20.04インストールしたら、/mnt以下のいくつかのハードドライブのマウントが正しく行われてなかったりしました。
DockerDesktopのバージョンが古すぎたこと(2.4ぐらいだった気がする)が原因なのかHyper-V使ってた頃の名残が変な感じに残ってるかわからないですが、DockerDesktopをアンインストール→インストールすることで解決しました。
あとDockerDesktopを最新(4.4.1)にアップデートしたら、ダッシュボード画面とかすごい使いやすくなってました。
この記事を投稿するにあたって使用したリポジトリは以下の2個。どっちもmysql使うところまで進めてなかったからエラー出てるのに気づきませんでした。。
https://github.com/imo-tikuwa/laravel-sail-example
https://github.com/imo-tikuwa/select2-and-auto-zip-example