スポンサーリンク

Laravel SailのDB接続について

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

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