このエラーにかなり悩まされたので健忘録として記載します。
初学者の情報です。不備などあればご指摘いただければ幸いです。
#環境
・vagrant-docker-laravel
・docker-compose version 1.25.0
・PHP 7.2.34
・Laravel Framework 5.8.38
・mysql Ver 14.14 Distrib 5.7.32, for Linux (x86_64) using EditLine wrapper
・phpmyadminを使用
#エラー内容( php artisan migrate 実行時 )
Illuminate\Database\QueryException : SQLSTATE[HY000] [1045] Access
denied for user 'root'@'172.23.0.3' (using password: NO) (SQL: select
* from information_schema.tables where table_schema = laravel and
* table_name = migrations and table_type = 'BASE TABLE')
内容的にはアクセス拒否のようなことを言われていると思われます。
#今回の主な原因
######①Laravelとmysqlのパスワードの不一致
Laravelの.envファイルに記載されているmysqlパスワード と docker-compose.yml内に記載されているmysqlパスワードが不一致でありました。
.envファイルに関してはエディター上で編集すればOKです
.ymlファイルに関してはターミナルから入る。docker-compose.ymlがあるディレクトリまで移動して、
sudo vi docker-compose.yml
を実行してファイル内を編集します。
(※今回は両ファイルのmysqlパスワードを”root”に統一しました。)
ちなみに、パスワードを揃えると書きましたが、正確には「docker-compose.yml内のパスワードに合わせなければならない!!」です。
(その他の項目も全て.ymlが主導権を握っているらしい。。)
######②データベースの未作成
今回はphpmyadminを用いています。
そもそも、migrationをする前にテーブルが入るための箱(データベース)をphpmyadminに作っておかなければならなかったです。(ブラウザ上で操作)
ちなみにここで作るデータベース名は .envファイルのDB_DATABASE=●●●で指定されている●●●と言う名前のデータベースを作っておくこと。
######③構文のミス
migrationファイル内の構文が間違っていました。
今回はtimestamps()とtimestamp()で引数の取り方が変わるため、構文エラーとなっていました。
構文エラーは多数あるため、その都度確認する必要があります。
#上記3点を改善した後
dbコンテナに入る
docker-compose exec db bash
Mysqlに接続
mysql -u root -p
●●●dbの存在を確認
show databases;
dbを選択
use ●●●;
dbコンテナを抜ける
exit
Mysqlを再起動
service mysql restart
コンテナを立ち上げ直して接続
docker-compose up -d
#そして最後に
php artisan migrate
####→→→成功!!