「php artisan migrate」を実行したらエラーが出た。。
dockerというのは色々なエラーが出るから初心者にはきついっすよね。。
コンテナ起動で苦労して、コンテナログインでも苦労して
ようやくマイグレートまできたら今度はこんなエラーが。。
SQLSTATE[HY000] [2002] Connection refused (SQL: select * from information_schema.tables where table_schema = laravel and table_name = migrations and table_type = 'BASE TABLE')
##エラーが出るまでの手順
Gitからプロジェクトをクローンして、以下の手順を踏みました。
dockerイメージ作成
$ docker-compose build --no-cache
dockerコンテナを起動
$ docker-compose up -d
コンテナログイン
$ docker-compose exec php-fpm /bin/bash
ディレクトリ移動
$ cd /var/www/html/
Laravel7系最新インストール
$ composer create-project --prefer-dist laravel/laravel=7.*.* .
###キャッシュ作成
php artisan config:cache &&
php artisan key:generate &&
php artisan config:cache
###マイグレーション
$ php artisan migrate
ここで上記のエラーが発生。
##DB接続先を確認
「Connection refused」ということは、DBへの接続が拒否られているっぽい。。
ここで.envのDB接続についての設定を確認。
DB_HOSTを見てみるとなぜか「127.0.0.1」になっていた!
あれ?DB名の設定はこれでいいんだっけ?
ymlファイルで確認すると。。
DB_HOST=mysql(仮)
あらまあ。(笑)
というわけでymlファイルに合わせる。。
##ymlファイルの「Volumes」の設定値にも関係があるらしい
上記の対応をしても解決しない場合以下のようなエラーが出ているかもしれない。
$ Access denied for user 'homestead'@'172.20.0.1' (using password: YES)
これはVolumesを削除すると解決する場合があるようです。
$ docker-compose down --volumes
$ docker-compose up -d --build
よければ試してみてください。
##DBのユーザ名などを「root」にしてたら引っかかった
再度マイグレーションしようとしたら、以下のようなエラーが発生。
mysqli_connect(): php_network_getaddresses〜(以下略)
dbに接続できないってことらしい。。あれ?コンテナの状況は??
以下コマンドでログを見ると以下のエラーを発見。
$ docker-compose logs
するとこんなエラーが。。
[ERROR] [Entrypoint]: MYSQL_USER="root", MYSQL_USER and MYSQL_PASSWORD are for configuring a regular user and cannot be used for the root user
ymlに記載しているDB情報に「root」と記載しているところがあった
(私の場合は「MYSQL_USER」)
これを任意の値に変更して再度マイグレーションを実行すると。。
Migration table created successfully.
・・・(以下略)
成功!!!
##終わりに
長くなりましたが、僕の場合はこんな感じで解決できました。
経験上(浅いですが。。)「.env」や「yml」ファイルの設定値が
おかしいことがほとんどなんですよね。。
英語の文献で苦しいことも多いので、
本記事が少しでもお役に立てれば嬉しいです!
何か誤った箇所があったら教えていただけると幸いです!