Laravelを使ったWEBアプリを作るのが最終的な目標なのですが、そこに至るまでにいろいろあったので技術的なことをまとめています。
PHPのフレームワークであるLaravelを扱うためにDockerというのがトレンドになる、ということでそこからやり始めました。
DockerをWindows10にインストール
↓
Laradockをインストール
↓
Laravelプロジェクトの作成
↓
mysqlの起動とLaravelからの接続
このような流れです。ここに来るまで何度も心が折れながらようやくできたような気がします。
侍エンジニア塾の講師の方がDockerやLaradockを使ったことないらしく(;´・ω・)なぜか自分がこれに取り組むことになって、教材とは違う環境構築に向かってハマってしまったのがそもそもの間違いなような気がします。
でもこれからWindowsでLaravelをやろうという人が私と同じエラーにぶつかったりすると思うので、その時の参考になればいいなと思いました。
精魂尽き果てたので若干雑な記事になってましたらご勘弁を。
もはや画像の大きさや見やすさなんて関係ない、この長ったらしい作業をとにかく投稿する。
Windows 10 HomeをProにアップグレード
Dockerというのはこれから主流になるマシンを仮想化するためのツールということです。
Macだとインストールが楽なのかもしれないけど自分のPCはWindowsなので、今日のこの記事はWindowsの人が対象です。
それがなんとWindows 10 HomeとWindows 10 Proで違います。
まずWindows 10 HomeですがDocker ToolboxというHome専用のものをインストールする必要があります。
その時の記事はこちら→(http://pg-happy.jp/docker-toolbox-windows10home-install.html)
ところでHome用の参考記事が無かったり、ことあるごとに躓くのでHomeでは進めない方が良いと思いました。
一応HomeでLaravelのインストールまでは出来たのですが、そのあとのmysqlで駄目になったりして、いっそのこと公式でも推奨されているProへアップグレードしてしまおうと思いました。
1万数千円かかりますが、疑心暗鬼で進んでいく時間的ロスを考えたらHomeからProにアップグレードされることをお勧めします。
HomeからProへのアップグレード方法
既にProを使っている方や、アップグレード方法がわかる方は飛ばしてください。
以下の流れに従ってアップグレードします。
Hyper-Vの有効化
以下の流れに従ってHyper-Vを有効にします。
Docker for Windowsのインストール
ここからDockerをインストールしたり設定したりを説明します。
Docker for Windowsのインストール
Windows 10 ProにはDocker for Windowsというのをインストールします。
①公式ページへアクセス
https://docs.docker.com/docker-for-windows/install/
インストールの流れなんかもここに書かれている。
②Download from Docker hubをクリック
③会員登録とログインが必要
④Get Dockerをクリックしてダウンロード
⑤Docker for Windows Installer.exeを起動
⑥画面の指示に従ってインストール作業を進めます
インストール後の確認
①Windows左下のボタンから「hyper-vマネージャー」を検索して起動
②LAPTOPというところから仮想マシンのところにMobyLinuxVMというのが出てるはず
③DockerのWelcome画面が出てくる
④Windowsの左下のボタンから「PowerShell」を検索して起動
⑤docker versionというコマンドを入力してみる
could not read CA certificate “C:\\Users\muku\\.docker\\machine\\machines\\default\\ca.pem”: open C:\Users\muku\.docker\machine\machines\default\ca.pem: The sytem cannot find the path specified.
というエラーが出ちゃった。
こちらの記事を参考にした
https://qiita.com/icck/items/60e1c1f8b6a05c8fdf72
Windows 10 HomeでDocker Toolboxをインストールしてた人が、Windows 10 Proにアップグレードして最初からやり直そうとしたときにこのエラーが出ちゃうようすです。
[Environment]::SetEnvironmentVariable("DOCKER_CERT_PATH", $null, "User") [Environment]::SetEnvironmentVariable("DOCKER_HOST", $null, "User") [Environment]::SetEnvironmentVariable("DOCKER_MACHINE_NAME", $null, "User") [Environment]::SetEnvironmentVariable("DOCKER_TLS_VERIFY", $null, "User") [Environment]::SetEnvironmentVariable("DOCKER_TOOLBOX_INSTALL_PATH", $null, "User")
これらのコマンドをPowerShellから1行1行打ち込んでいきました。
PowerShellを再起動して、docker versionコマンドを入力したらバージョン情報が出たので、これでDockerのインストールがうまくいったことを確認できました。
Kitematic(カイトマティック)をインストール
カイトマティックというのはDockerをグラフィカルに操作するためのツールです。
①Windowsの右下のタスクトレイからクジラのDockerを起動してKitematicをクリック
②Downloadをクリックして、デスクトップなどに保存
③ZIPファイルを解凍して、フォルダ名をKitematicとしておき
④C:\Program Files\Docker に移動させる
Laradockのインストール
公式ページ
https://laradock.io/
ここにインストールの流れなどが書かれているけど英語なので細かい部分で作業ミスがしばしば発生してうまくなかった。
gitのインストール
Laradockのインストールの前にGitが無いと駄目なので。
Windowsを使ってる場合はgitがインストールされていなくて、laradockを取得するためのgitコマンドが使えない場合もあるのでインストールしておきます。
参考にさせていただいたサイト(http://www.curict.com/software/Windows10/Windows10_git.html)
①gitの公式サイトへアクセスし
https://git-scm.com/
②Windows用のをダウンロードしてGitのインストーラを起動します
③インストーラに従って進めていきます
④PowerShellを起動して、gitコマンドを入力してみてずらっと出てくればインストールに成功していることがわかる
Laradockのクローン
クローンというのはgitというLaradockが管理されているところから取得することを意味しているらしい。
①作業フォルダを作成しておく
私の場合はC:\Users\ユーザー名\dockerworkspace
というフォルダを作ったのでここを作業場にしようとしています。
Dockerを使うと「共有」という単語がしばしば出てきます。それはWindows側から見たファイルと、Docker側から見たファイルを共有してDocker側でも使えるようにする、ということです。
ところでWindowsのUsers配下は自動的に共有ができるので、そこへ作業フォルダを作ったのです。
Users配下じゃなくてC:\直下とかに作業フォルダを作ると共有するための作業が1つ増えるので手間なので、お好きなように作業フォルダを作りましょう。
②PowerShellを起動して、cdで作業フォルダへ移動
③クローンのコマンドを入力
git clone https://github.com/LaraDock/laradock.git laradock
このコマンドでlaradockというフォルダを生成してlaradock.gitというファイルをダウンロードしてきて展開してくれる。
このあとは公式ページを見てもよい
https://laradock.io/
けどうまくいかない事が多くて、右往左往して最終的にこちらの記事を参考にさせていただきました。
https://note.mu/pasocafe/n/n8f7cf417d977
本当に感謝。
④laradockフォルダ内で.envファイルを作る
cd laradock cp env-example .env
laradockフォルダ内にenv-exampleという元々あったファイルをコピーして.envというファイルを作成した。
⑤laradock/.envファイルのMYSQLの部分を編集
MYSQL_VERSION=5.7.16 MYSQL_DATABASE=myappdb MYSQL_USER=myappusr MYSQL_PASSWORD=123456
将来的にLaravelで作ったWEBアプリをレンタルサーバー(Xサーバー)に載せたいと思っていて、現時点のXサーバー内のmysqlバージョンが5.7.16だったので、それに合わせました。
ここは適宜自分の環境に合わせて編集。
MYSQL_DATABASEは作ろうと思ってるデータベース名
おなじくMYSQL_USERにも適当にユーザ名、MYSQL_PASSWORDにもパスワードを記述。
⑥Docker上にコンテナを起動(無ければ生成)する
PowerShellからコマンドを入力します。これはLaradockの公式ページにあったコマンド。
C:\Users\ユーザー名\dockerworkspace\laradock
というLaradockを入れたフォルダに移動してから次のコマンドを入力
docker-compose up -d nginx mysql phpmyadmin workspace
このコマンドでnginx、mysql、phpmyadmin、workspaceの4つのコンテナを起動します。
nginxというのがWEBサーバーのことです。
workspaceというのがphpを動かすコンテナの様です。
初回はこれらが無いのでimageをダウンロードしてきて、そのあとコンテナが起動する仕組みだと思います。
かなり時間がかかる。次のような画面が出てくればOKだと思う。
それぞれコンテナ名称が次のようになっています。
laradock_nginx_1
laradock_mysql_1
laradock_phpmyadmin_1
laradock_workspace_1
⑦ブラウザでlocalhostにアクセスしてみる
404 Not Found nginx
という文字が出ている。
nginxというのが今回使用するWEBサーバーです。
404だけどちゃんとWEBサーバーが応答しているのがわかります。該当するルートフォルダにサイトを置けば、表示されるはずです。
⑧ブラウザでlocalhost:8080にアクセスしてみる
こちらはphpMyAdminからmysqlにアクセスできます。
サーバ:mysql
ユーザ名:root
パスワード:root
でログインできます。(下記画像はちょっと実験でやったゴミDBがあるのでスルーしてください)
あと先ほど.envファイルを作成したときに指定した
ユーザ名:myappusr
パスワード:123456
でもログインできるはず。
⑨workspaceコンテナにログインする
PowerShellから次のコマンドでlaradock_workspace_1にログインできます。
docker-compose exec --user=laradock workspace bash
このコマンドはlaradock_workspace_1にログインしつつ、bashも使えるようにする、というコマンドです。
/var/www$
というコマンドプロンプトが出てくれば成功です。
⑩カレントディレクトリを理解する
PowerShellで今いるフォルダの中身を見るコマンドls(中のファイル一覧表示)を入力してみます。
(またもテストで作ったlaravelappやmyappフォルダが見えるが、これは無視してください。)
ということで、コンテナにログインした直後は「dockerworkspace\」に居ることがわかりました。
これは.envファイルに設定されている以下の相対パスが該当します。
APP_CODE_PATH_HOST=../
つまり.envファイルの1つ上の階層に現在は指定されている、ということですね。
コンテナのIPアドレスを確認してmysqlユーザーを作成
色々と作業を進めていく中で理解したのですが、コンテナごとにIPアドレスが付与されていることがわかりました。
それで例えばmysqlに接続するユーザーに対してHOST名を指定しますよね。
その時にIPアドレスを指定しなきゃいけなくて、これに気づかなくて一生さまようところでした。
phpMyAdmin→mysqlへの接続
ターミナル→mysqlへの接続
PHP→mysqlへの接続
それぞれユーザーの権限が無いと接続できませんでした。
①
作業のためにPowerShellを2つ起動しました。
1つはターミナルとして使ったりdockerコマンドをする用で・・・(A)
もう1つはターミナルからmysqlへ接続する用です。・・・(B)
②
起動中のコンテナを確認します。PowerShell(A)で以下のコマンドを入力。
docker ps
laradock_nginx_1
laradock_mysql_1
laradock_phpmyadmin_1
laradock_workspace_1
これらのコンテナが起動しているはずです。STATUSがUpになってればOKです。起動してなければ
docker-compose up -d nginx mysql phpmyadmin workspace
このコマンドで再起動しておきます。
③mysqlのユーザー作成用のPowerShell(B)で
laradockフォルダに移動していることを確認してから
docker exec -it laradock_mysql_1 /bin/bash
コマンドでmysqlコンテナにログインします。
④mysqlへrootユーザーで接続します
mysql -u root -p
Enter password
と言われるので「root」と入力してログインします。
このルートユーザーが居ることすらしらなくてしかもパスワードも一緒だなんてしらなくて何日も費やしてしまいました(;´・ω・)
データベースの一覧を見てみます。
mysql> show database; +--------------------+ | Database | +--------------------+ | information_schema | | myappdb | | mysql | | performance_schema | | sys | +--------------------+
先ほどlaradock/.envファイルに記述したmyappdbというデータベースが生成されてるはずですが、ここではとりあえず無視しますね。
②コンテナのIPアドレスを確認
(A)のPowerShellで以下コマンドを入力
laradock_workspaceからexitで抜けてることを確認してから
docker inspect コンテナID
コンテナIDはdocker psコマンドで表示されたCONTAINER IDを入力します。
今回はlaradock_workspaceのコンテナIDを指定しました。
ずらずら表示されますが、ここでIPAddressのところをメモしておきます。 172.19.0.5
③mysqlユーザーを作ってみる
(B)のPowerShellで以下コマンドを入力
すでにrootでmysqlにログインしている状態から。
GRANT ALL PRIVILEGES ON myappdb.* TO myappusr@localhost IDENTIFIED BY '123456';
このコマンドでlocalhostのmyappusrというユーザーを作成。
さらにこのコマンドで172.19.0.5のホストのmyappusr2というユーザーを作成。これはさっき確認したworkspaceコンテナのIPアドレス。
GRANT ALL PRIVILEGES ON myappdb.* TO 'myappusr2'@'172.19.0.5' IDENTIFIED BY '123456';
ユーザーへの権限を確定させるコマンド。必要ないかもしれないけどやっておく。
FLUSH PRIVILEGES;
ユーザーが作成されたかを確認します。
mysqlデータベースの中を見ます。
use mysql select Host, User, Select_priv, Insert_priv from user;
これで
Host | User |
---|---|
% | root |
172.19.0.5 | myappusr2 |
localhost | myappusr |
localhostというのは今使ってるこのターミナルのことだと思います。
rootユーザーをexitしてからmysqlにmyappusrでログインしてみます。
mysql -u myappusr -p
パスワードは自分で設定した123456です。
このユーザーでDBを見ます。
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | myappdb | +--------------------+
このユーザーには権限がmyappdbにしかないので、これしか見れません。
localhostのmyappusrでmysqlに接続してSQL文を直で記述してテーブル作成(CREATE)や行の挿入(INSERT)もできました。
mysql> use myappdb Database changed mysql> create table `people` ( -> `id` integer primary key auto_increment, -> `name` text not null, -> `mail` text, -> `age` integer -> ); Query OK, 0 rows affected (0.05 sec)
mysql> INSERT INTO `people` VALUES (1, 'honda', 'honda@pg-happy.jp', 40); Query OK, 1 row affected (0.02 sec) mysql> INSERT INTO `people` VALUES (2, 'toyota', 'toyota@pg-happy.jp', 30); Query OK, 1 row affected (0.01 sec) mysql> INSERT INTO `people` VALUES (3, 'hawaii', 'hawaii@pg-happy.jp', 15); Query OK, 1 row affected (0.01 sec) mysql> select * from people; +----+--------+--------------------+------+ | id | name | mail | age | +----+--------+--------------------+------+ | 1 | honda | honda@pg-happy.jp | 40 | | 2 | toyota | toyota@pg-happy.jp | 30 | | 3 | hawaii | hawaii@pg-happy.jp | 15 | +----+--------+--------------------+------+
もう1人作ったmyappusr2でmysqlにログインできるか確認してみました。
myappusrはexitしてから
mysql -u myappusr2 -p Access denied for user 'myappusr2'@'localhost'
アクセスが拒否されましたので。このことからmysqlコンテナはlocalhostなんだな、とわかりました。
もう1人myappusr3を作ってみました。
ブラウザでlocalhost:8080へアクセスします。つまりphpMyAdminにアクセスしています。
このときmyappusr2でログインしようとするとエラーが出たので。
Access denied for user ‘myappusr2@172.19.0.3’
なのでphpMyAdminからアクセスするには172.19.0.3にユーザーが必要なんだな、と思いました。
%のワイルドカードで指定してもよいと思ったのですが。(後からだけど)
PowerShell(B)からrootユーザーでmysqlに接続して以下コマンドを入力。
GRANT ALL PRIVILEGES ON myappdb.* TO 'myappusr3'@'172.19.0.3' IDENTIFIED BY '123456'; FLUSH PRIVILEGES;
これでmyappusr3を作成したら、phpMyAdminからmysqlに接続できました。
たぶんdocker psとdocker inspect コンテナIDでphpMyAdminのIPアドレスを調べたら172.19.0.3になってたはず。
あとはPHPのプログラムからmysqlに接続するためのユーザーが必要ですが、IPアドレスがわからないので保留。あとで記述。
Laravelプロジェクトを生成する
ここからLaravelプロジェクトを生成して、その中にmysqlに接続する記述をしていきます。
dockerworkspace\myappフォルダを作成して
①Laravelプロジェクト生成コマンド
引き続き、myappフォルダ内にLaravelプロジェクトを生成します。
PowerShellでdockerworkspace\laradockに移動してから以下コマンド入力。
docker-compose exec --user=laradock workspace bash
これでlaravel_workspace_1のコンテナにログインするので、引き続きcomposerコマンドでLaravelプロジェクトを生成します。
composer create-project laravel/laravel myapp
このコマンドでOKです。
これで
dockerworkspace\myapp
というフォルダが出来て、その中にLaravelが展開されます。
一方、以下のようなコマンドでもOKです。–prefer-distを付けると圧縮ファイルをダウンロードしてきて展開してくれる、ということでこちらのコマンドの方が時短になるんだそう。
composer create-project laravel/laravel src --prefer-dist
できました。
dockerworkspaceフォルダの中には
├ laradock
└ myapp
となりました。
②Laravelプロジェクトの.envを編集
今度はLaradockじゃなくて今生成したLaravelプロジェクトの.envファイルを編集します。
編集ファイルdockerworkspace\myapp\.envです。
もし.envファイルが無ければdockerworkspace\myapp\.env.exampleをコピーして.envを生成してから編集します。
cd myapp cp .env.example .env
.envの変更箇所は以下のとおり。
viエディタでもいいけど、自分はWindowsのサクラエディタとかAtomで編集しています。(UTF8の改行コードLFにするのを忘れない)
DB_CONNECTION=mysql DB_HOST=mysql DB_PORT=3306 DB_DATABASE=myappdb DB_USERNAME=myappusr DB_PASSWORD=123456
DB_USERNAMEのところはこれからmysqlユーザーを作るので、それにしておいてもいいし、既に作っているユーザーを入力しておけばよい。今回はmyappusr2にしてある。
ただし接続Hostがまだ不明なのでうまく接続できないかも。
いったんPowerShellのほうでコンテナからexitしてから、各コンテナを再起動しておきました。
docker-compose up -d nginx mysql phpmyadmin workspace
③マイグレーションを実施
ここからデータベースを生成します。
workspaceコンテナにログインします。このコンテナの中でLaravelの様々なコマンドが使えますので。
docker-compose exec --user=laradock workspace bash
PowerShellのほうで、cdでmyappフォルダへ移動してから
php artisan migrate
と実施。
このコマンドが何をやってるのかというと
データベース生成のためのmigrationファイルは以下の場所に最初から格納されていて、これが使われている様子。
dockerworkspace\myapp\database\migrations
この中に
create_users_table.php
create_password_resets_table.php
という2つのファイルがあって、これらが実行されてデータベースが2つ生成されます。
④生成されたテーブルの確認
phpMyAdminで確認しよう。
ブラウザでlocalhost:8080にアクセスしてphpMyAdminにログインする。
myappdbデータベースには何もテーブルがなかったけど、
上記コマンドにより
migrations
password_resets
users
というテーブルが出来ていた。
中身は空っぽだけど。
とりあえず、こういう最初からマイグレーションファイルがあるというだけで、別にこの段階でマイグレーションしなくてもいいと思う。
⑤APP_CODE_PATH_HOSTを変更
laradocworkspace\laradock\.envを編集。
APP_CODE_PATH_HOST=../myapp
に変更。
これでLaravelプロジェクトのフォルダを指定。
⑥Nginxコンテナを再起動してLaravelのサイト表示を確認
docker-compose up -d nginx
nginxのコンテナを再起動してWEBサーバーを再起動します。
先ほどはブラウザでlocalhostにアクセスすると404 Not Foundが出ていたと思いますが、
こんどは生成したLaravelプロジェクトのトップページが表示されてるはずです。
Laravelプロジェクトからmigrationを使ってDB生成、挿入
いよいよですがLaravelプロジェクトからmysqlに接続するやりかたです。
ここではmigrationファイルを作ってseedでデータベースを生成してみます。
①dockerworkspace\laradockフォルダに移動して
②workspaceコンテナにログイン
docker-compose exec --user=laradock workspace bash
そうすると前章の.envの設定によって、dockerworkspace\myappにマウントされる。
③引き続きmigrationファイルを作成して
php artisan make:migration create_customerlist_table
これで
dockerworkspace\myapp\database\migrationフォルダの中に
YYYY_MM_DD_create_customerlist_table.php
というファイルが出来た。
このファイルにテーブル定義を記述するためupメソッドを編集。
public function up() { Schema::create('customerlist', function (Blueprint $table) { $table->increments('id'); $table->string('name'); $table->string('email'); $table->integer('age'); $table->string('address'); $table->string('tel'); $table->timestamps(); }); }
④マイグレーションを実行
php artisan migrate
⑤テーブルが生成されたか確認。
phpMyAdminからでもいいし、別のPowerShellからmysqlコンテナにログインして、mysqlに接続して確認してもよい。
show tables; desc customerlist;
これで確認できた。
⑥Seederを生成
Seederを使って、先ほど作成したテーブルに一括でデータを挿入してみます。
workspaceコンテナにログインしてる方のPowerShellでコマンド入力。
php artisan make:seeder CustomerlistTableSeeder
これで
dockerworkspace\myapp\database\seeds\CustomerlistTableSeeder.php
というファイルが生成されている。
⑦runメソッドを編集
このファイルのrunメソッドを以下のように編集
public function run() { $param = [ 'name' => 'ueno', 'email' => 'ueno@yamatesen.org', 'age' => 20, 'address' => 'UENO', 'tel' => '0120-123-4567', ]; DB::table('customerlist')->insert($param); $param = [ 'name' => 'sinagawa', 'email' => 'sinagawa@yamatesen.org', 'age' => 30, 'address' => 'SINAGAWA', 'tel' => '0120-123-4568', ]; DB::table('customerlist')->insert($param); $param = [ 'name' => 'sinjuku', 'email' => 'sinjuku@yamatesen.org', 'age' => 18, 'address' => 'SINJUKu', 'tel' => '0120-123-4569', ]; DB::table('customerlist')->insert($param); }
⑧Seederを登録
以下のファイルを編集
dockerworkspace\myapp\database\seeds\DatabaseSeeder.php
先ほど作成したCustomerlistTableSeederクラスを記述。
これで
public function run() { $this->call(CustomerlistTableSeeder::class); }
⑨db:seedコマンドを入力
workspaceコンテナにログインしている方のPowerShellで以下コマンド入力。
php artisan db:seed
⑩挿入されたか確認
mysqlコンテナにログインしている方のPowerShellで
select * from customerlist;
ちゃんとデータが入ってることを確認できた。
データが入らなかったりエラーが出たとしたらたぶんmysqlユーザーを生成してないか、IPアドレスが違うとか.envの設定ミスかもしれない。
Laravelプロジェクトからmysqlに接続して読み込む
今度はLaravelプロジェクトにブラウザでアクセスしてみます。
その時にmysqlに接続して、先ほど作成したCustomerlistTableからデータを読み込んできて、表示させるところまでやってみます。
①コントローラーを作成
workspaceコンテナにログインした状態で
php artisan make:controller HelloController
myapp\app\\Http\Controllers\HelloController.php
が生成される。
このファイルを編集。
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Http\Response; use Illuminate\Support\Facades\DB; class HelloController extends Controller { public function index(Request $request) { $items = DB::select('select * from customerlist'); return view('hello.index', ['items' => $items]); } }
このように記述。select文でcustomerlistテーブルからすべてのデータを持ってきています。
②ルーティングを指示
myapp\routes\web.php
を開いて以下のようにhelloへのアクセスに対してHelloControllerのindexメソッドを呼び出すように指示。
Route::get('/', function () { return view('welcome'); }); Route::get('hello', 'HelloController@index');
③ビューを作成
以下のフォルダを作成
myapp\resources\views\hello
さらにその中にindex.blade.phpファイルを新規作成。
中身を以下のように記述。
<html> <head> <title>こんにちはmysql</title> </head> <body> <h1>こんにちはmysql</h1> <table> <tr><th>名前</th><th>メール</th><th>年齢</th><th>住所</th><th>電話</th></tr> @foreach ($items as $item) <tr> <td>{{$item->name}}</td> <td>{{$item->email}}</td> <td>{{$item->age}}</td> <td>{{$item->address}}</td> <td>{{$item->tel}}</td> </tr> @endforeach </table> </body> </html>
④ブラウザでアクセスして表示されるか確認する
エラーが出てしまった。
SQLSTATE[HY000] [1045] Access denied for user ‘myappusr2’@’172.19.0.6’ (using password: YES) (SQL: select * from customerlist)
これが出ちゃう。ということはmysql接続IPは172.19.0.6ということか?
⑤mysqlへの接続ユーザーがこのIPアドレスじゃないよ、というエラーだと思う。
dockerworkspace\laradock\.env
ファイルを開いてみて
MYSQL_USER=myappusr2
のところに書かれているユーザーが居るかどうか、またHOSTに172.19.0.6が指定されているか確認を。
いない。
⑥ユーザーを作成あるいは権限付与
PowerShellでmysqlコンテナにログインして(あるいは既に2窓でPowerShellで接続してるはず)
docker exec -it laradock_mysql_1 /bin/bash
rootでmysqlに接続。
mysql -u root -p
mysqlデータベースのuserテーブルを確認してみる。
use mysql select Host, User from user;
このようにHost部分に先ほどエラーが出てたIPアドレスを付与。
GRANT ALL PRIVILEGES ON myappdb.*TO 'myappusr2'@'172.19.0.6' IDENTIFIED BY '123456';
あとで説明しますが、このIPアドレスはphpコンテナのIPアドレスなので、それを調べて記述してもよいと思います。
というかユーザー作成のときにHostを%でやればいいと思うんだけど・・
⑦ユーザーが作成されたか確認して
select Host, User from user;
⑧ブラウザでhelloに再度アクセスしてみます。
エラーが出なければ、costomerlistテーブルからデータを持ってこれましたね。