LaradockをWindowsにインストールしてブラウザ表示&mysqlユーザー作成&接続まで

侍エンジニア塾でPHPの学習をしています。

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専用のものをインストールする必要があります。
その時の記事はこちら→(https://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', &#91;'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>

④ブラウザでアクセスして表示されるか確認する

https://localhost/hello

エラーが出てしまった。

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テーブルからデータを持ってこれましたね。

タイトルとURLをコピーしました