2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

dockerで立ち上げたlaravelとmysqlのDB接続できなかった話

Last updated at Posted at 2022-04-18

前提

https://www.engilaboo.com/laravel-docker/
上記記事のデータベース接続でエラーが出てつまづいた。

試したこと

まず、php artisan migrateをしているところがアプリケーションのコンテナ内じゃなかったのがダメだった。
(コンテナ内からの呼び出しはdbとかdocker-compose.yamlに記載のもので接続する。逆にコンテナ外からの呼び出しは、大体 127.0.0.1 で呼び出せる)

なので、execでアプリケーションコンテナに入って実行。

コンテナに入ってコマンドをうっても、以下エラーがでた。

SQLSTATE[HY000] [1045] Access denied for user 'user'@'172.20.0.3' (using password: YES) (SQL: select * from information_schema.tables where table_schema = database and table_name = migrations and table_type = 'BASE TABLE')

dockerのMYSQLではlocalhost(172.20.0.3)で接続できないエラーのよう。
(172.20.0.3はdockerが勝手に振ったホスト、いずれにせよlocalhostを意味する。)
参考記事
https://codeaid.jp/blog/docker-mysql-php/

解決方法

mysqlのログインユーザーに権限をもたせると解消されるらしく、.envのDB_USERNAMEをrootにしたらエラーが解消された。
docker-compose.yamlのDB_USERNAMEをrootにするとエラーでmysqlコンテナが立ち上がらなくなるので注意。
rootユーザーは%権限をもっているからだとおもう。

おまけ

userのままでもmysqlから権限を付与すれば対応可能か?と試行錯誤

docker-compose exec db bash
でmysqlコンテナに入って
mysql -u root -p
で、パスワードを入力してmysqlに接続したら、
GRANT ALL ON データベース名.* TO 'ユーザー名'@'%' ;
こんな感じで権限を付与すればいけるはず。
最初の設定であれば、
GRANT ALL ON database.* TO 'user'@'%' ;

とすれば解決のはずが、なぜかログインしているroot権限で他のユーザーにGRANTできずw
エラー内容。
ERROR 1410 (42000): You are not allowed to create a user with GRANT
当該ユーザーの作成のときにlocalhost をつけないと表示されるようだ。
https://note.com/haraaa/n/n8ea4986ec3b5

ユーザーを一度削除してから作り直した
DROP USER 'user'@'localhost';
CREATE USER 'user'@'172.20.0.3' IDENTIFIED BY 'pass';
GRANT ALL ON database.* TO 'user'@'%' ;
https://www.digitalocean.com/community/tutorials/how-to-create-a-new-user-and-grant-permissions-in-mysql-ja

dockerからlaravelをインストールしてmysql接続がこんな手数あるはずないので、もっとスマートなやり方があるはず。最初からMYSQL_USERをrootにしておくのがいいのかな。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?