多くの先人の方の知恵により解決しました。
今回はそのまとめのまとめみたいになります。
引用方法には気をつけておりますが、
間違いや抜けがありましたらご指摘いただければ修正いたします。
その他、「こうしたほうがいいよ」や「今はこうやってやるよ」、
MySQLのセキュリティノートまで追えてないのでセキュリティ面など、
コメントで追加していただけると幸いです。
やりたいこと
Laradockを取得後、workspaceコンテナからmysqlコンテナへ接続する
手順
かなりはぶきます。
1, Laradockのインストール
- A.2) Don’t have a PHP project yet: からスタートし、2 まで実行
2, ローカルにLaravelを取ってくる
$ composer create-project --prefer-dist laravel/laravel blog
3, Laradock/.env の書き換え
### MYSQL #################################################
MYSQL_VERSION=8.0 <= 適宜変えてください。今回はバージョンを指定します
MYSQL_DATABASE=blog_db <= お好きなDB名を
MYSQL_USER=administer <= それっぽいユーザー名
MYSQL_PASSWORD=blog12345 <= 便宜上簡易的にしてます
MYSQL_PORT=3306 <= 他に使っていなければこのままで
MYSQL_ROOT_PASSWORD=root <= ここは便宜上にrootにしています。デフォルトでもOKかと
MYSQL_ENTRYPOINT_INITDB=./mysql/docker-entrypoint-initdb.d
4, laradock/mysql/my.confに以下を追加
default_authentication_plugin= mysql_native_password
5, blog/.env の書き換え
DB_CONNECTION=mysql <= PDOは勝手に入れてくれるのでこのように変更
DB_HOST=mysql <= docker内部でリンク(? 的なものを作ってくれるようなのでこの名前で
DB_PORT=3306 <= 他に使っていなければこのままで
DB_DATABASE=blog_db <= 3と合わせる
DB_USERNAME=administer <= 3と合わせる
DB_PASSWORD=blog12345 <= 3と合わせる
6, docker-compose up してひたすら待つ
$ docker-compose up -d workspace nginx redis mysql
最低限だけ入れてます
7, 終わったらworkspaceに入る
$ docker-compose exec workspace bash
8, blog/ 以下で php artisan migrate コマンドを実行
うまくいけばOK
ダメなら下へ
ちなみに私は下のようなエラーが出ました。
現象
Illuminate\Database\QueryException : SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client (SQL: select * from information_schema.tables where table_schema = coporeate and table_name = migrations and table_type = 'BASE TABLE')
at /var/www/coporate/vendor/laravel/framework/src/Illuminate/Database/Connection.php:664
660| // If an exception occurs when attempting to run a query, we'll format the error
661| // message to include the bindings with SQL, which will make this exception a
662| // lot more helpful to the developer instead of just the database's errors.
663| catch (Exception $e) {
> 664| throw new QueryException(
665| $query, $this->prepareBindings($bindings), $e
666| );
667| }
668|
Exception trace:
1 PDOException::("PDO::__construct(): The server requested authentication method unknown to the client [caching_sha2_password]")
/var/www/coporate/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70
2 PDO::__construct("mysql:host=mysql;port=3306;dbname=coporeate", "admin", "admin0401", [])
/var/www/coporate/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70
Please use the argument -v to see more details.
上のURLを参考に作業します。
9, 一旦、workspaceから抜けて、mysql コンテナへ
$ docker-compose exec mysql bash
10, mysqlへroot権限でログインして、ユーザー権限の付与とパスワード形式の変更、DBへのアクセス権を付与します.
$ mysql -u root -p
$ password: root <= ここは3で指定したものを使います
mysql > ALTER USER administer IDENTIFIED WITH mysql_native_password;
mysql > ALTER USER 'administer'@'%' identified mysql_native_password BY 'blog12345';
mysql > GRANT ALL ON `blog_db`.* TO 'administer'@'%' ;
mysql > GRANT ALL ON `blog_db`.* TO 'administer'@'localhost' ;
mysql > FLUSH PRIVILEGES ;
11, mysqlのコンテナを抜けて、再度workspaceコンテナに入り、blog/ 以下でコマンドを実行
php artisan migrate
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_000000_create_users_table (0.05 seconds)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated: 2014_10_12_100000_create_password_resets_table (0.04 seconds)
このような形でできればOK
所感
MySQL8.0.4からセキュリティを厳密にしましょうということで、caching_sha2_passwordをデフォルトにしているために発生したエラーです。 10番の内容をmysqlのdocker.ymlに記載したのですが、読み込んでくれなかったので、今回は直接変更しました。調べてみるとdokcer-compose up 時にMySQLの権限周りもやってくれそうな感じはしたので、試してみるつもりです。
以上となります。
何かの参考になれば幸いです。