今日は勉強中のDockerについて書いていこうかなと思います。
Dockerの開発環境については、以下の記事で書いているので開発環境を整えるときにぜひ使ってください。
Docker初心者がWindowsでgitSSH接続からdockerコマンドを打てるまでの流れ
まずDockerのコンテナ内でphp artisan migrate
を打つと、以下のエラーが。。。
SQLSTATE[HY000] [1045] Access denied for user ‘root’@’196.172.0.2’ ~
MySQLのエラーは本当に厄介。
とりあえずこれはアクセス権がないとのことで、MySQLのコマンドにてDocker専用のアクセスできるユーザーを作成する。
アクセス権限があるユーザー、データベースの作成もとっくにやってるよという方は、こちらの番外編
#データベース、アクセス権を持つユーザーの準備#
###ユーザー作成###
mysql > create user create user 'docker'@'%' identified by '好きなパスワード(以下passwordと置く)';
###データベース作成###
mysql > create database test
#ユーザーにアクセス権付与#
今作成したユーザー(docker)にデータベースへのアクセス権を付与します。
###データベース選択###
使いたいデータベースを選択します。
mysql > use test
###アクセス権付与###
mysql > GRANT ALL PRIVILEGES ON データベース名(test).* TO ユーザー名@localhost IDENTIFIED BY 'password' WITH GRANT OPTION;
mysql > FLUSH PRIVILEGES;
###アクセス権確認###
SELECT user, host, db FROM mysql.db;
+---------------+-----------+--------------------+
| user | host | db |
+---------------+-----------+--------------------+
| docker | % | test |
| mysql.session | localhost | performance_schema |
| mysql.sys | localhost | sys |
+---------------+-----------+--------------------+
このような結果が出たらOKです。
ちゃんとtest(データベース)にdocker(ユーザー)のアクセス権が付いていますね。
#.env docker-composeファイルの編集#
DB_CONNECTION=mysql
DB_HOST=db(自身の開発環境に合わせてdbかmysql)
DB_PORT=3306
DB_DATABASE=test
DB_USERNAME=docker
DB_PASSWORD=password
FROM mysql:8.0
ENV MYSQL_DATABASE=test \
MYSQL_USER=docker \
MYSQL_PASSWORD=password \
MYSQL_ROOT_PASSWORD=password \
TZ=Asia/Tokyo
COPY ./my.cnf /etc/mysql/conf.d/my.cnf
RUN chmod 644 /etc/mysql/conf.d/my.cnf
#アプリの起動#
###アプリのダウン###
docker-compose down --volumes
###アプリのビルド###
docker-compose up -d
docker-compose exec app bash
root@eef5ce366e9e:/work# cd larabel(プロジェクト名)
root@eef5ce366e9e:/work#/laravel php artisan migrate
このようにしてマイグレーションを実行することができました!
MySQLのエラーって実は公式のドキュメントの方が分かりやすい場合もあるので、まずは公式ドキュメントを参照することをおススメします。
#番外編#
マイグレーションを実行できないのにはキャッシュが原因で行えない可能性もあるのでぜひキャッシュを消去して見て下さい。
docker-compose down --volumes
僕はこのコマンドを打つことでマイグレーションできました。
また、Laravelのプロジェクトに移動してartisan
でキャッシュ消去も試してみてください。
docker-compose exec app bash
root@eef5ce366e9e:/work# cd larabel(プロジェクト名)
root@eef5ce366e9e:/work#/laravel php artisan chace:clear
root@eef5ce366e9e:/work#/laravel php artisan config:cache
以上、「DockerのMySQL接続で「SQLSTATE[HY000] [1045] Access denied for user」が出たときの対処法」でした!
良ければ、LGTM、コメントお願いします。
また、何か間違っていることがあればご指摘頂けると幸いです。
他にも初心者さん向けに記事を投稿しているので、時間があれば他の記事も見て下さい!!
Thank you for reading