laradock環境構築のエラーと解決策

laradockで環境構築したらエラーの見本市かな？というくらいにエラーが出たのでその時のエラーと解決策をまとめました。

色んなエラーが出たので参考までにどうぞ！

# プロジェクトフォルダをVScode等で書き換えようとするとエラーになる

でもvimだったら変更できる、という方は権限の問題です。
workspaceのソースコードのあるディレクトリで、権限を確認してください

```
/var/www/app$ ls -l
```

```
/var/www/app$ ls -l
total 1600
drwxr-xr-x 14 root root   4096 Jun  3 10:27 app
-rw-r--r--  1 root root   1686 Jun  3 10:27 artisan
drwxr-xr-x  3 root root   4096 Jun  3 10:27 bootstrap
-rw-r--r--  1 root root   2153 Jun  3 10:27 composer.json
-rw-r--r--  1 root root 313747 Jun  3 10:27 composer.lock
drwxr-xr-x  2 root root   4096 Jun  3 10:27 config
drwxr-xr-x  5 root root   4096 Jun  3 10:27 database
-rw-r--r--  1 root root   1275 Jun  3 10:27 package.json
（省略）
```

このような感じでrootになっていたら全てのファイルをlaradockに変える必要があります。


これで解決

```
/var/www# chown -R laradock:laradock /var/www
```

/var/www以下の権限をlaradockに変更することで、コンテナ外のVScodeからでも保存できます。


```
root@09e56af218da:/var/www/source# ls -l
total 1604
drwxr-xr-x 14 laradock laradock   4096 Jun  3 10:27 app
-rw-r--r--  1 laradock laradock   1686 Jun  3 10:27 artisan
drwxr-xr-x  3 laradock laradock   4096 Jun  3 10:27 bootstrap
-rw-r--r--  1 laradock laradock   2153 Jun  3 10:27 composer.json
-rw-r--r--  1 laradock laradock 313747 Jun  3 10:27 composer.lock
drwxr-xr-x  2 laradock laradock   4096 Jun  3 10:27 config
drwxr-xr-x  5 laradock laradock   4096 Jun  3 10:27 database
-rw-r--r--  1 laradock laradock   1275 Jun  3 10:27 package.json
（省略）
```

良い感じ！

しかしこのようになっている人は、コンテナに入るコードが違っている可能性があります。laradockユーザーでコンテナに入ってください。

```
$ docker-compose exec --user=laradock workspace bash
```


# MySQLのインストールバージョンを間違えた＆Permission deniedで.laradock/data/mysqlが消せない

人間、間違えてはいけない時こそ間違えるんですよねぇ（遠い目）

ほんとは5.7がよかったのにやってしまった

```
$ docker-compose exec mysql mysql --version
mysql  Ver 8.0.23 for Linux on x86_64 (MySQL Community Server - GPL)
```

`$ cat .env | grep DATA_PATH_HOST`で探した場所にdockerの情報がはいっていて、これを消さないとここから過去のデータを引き継いでしまいます。
Dockerさんすごい賢い


```
$ cat .env | grep DATA_PATH_HOST
DATA_PATH_HOST=~/.laradock/data

$ rm -rf ~/.laradock/data/mysqlこれができなかったら
$ sudo rm -rf ~/.laradock/data/mysqlこっちで消し去ってください。

$ docker rmi laradock_mysql
$ docker rm (mysqlコンテナID)
$ docker ps -a
```

mysqlコンテナもイメージも消し去り、それを確認してください
そして今度は、laradockの.envファイルを正しく修正してください。

その後もう一度mysqlコンテナを立ち上げて、バージョンを確認してください。

```
$ docker-compose up -d mysql
$ docker-compose exec mysql mysql --version
mysql  Ver 14.14 Distrib 5.7.31, for Linux (x86_64) using  EditLine wrapper
```

# 作るDBの名前を間違えた

```
$ docker-compose up -d mysql
$ docker exec -it laradock_mysql_1 bash
# mysql -u root -p
Enter password: 
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| default            |
| dev_db_1           |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
6 rows in set (0.00 sec)
```

DB作ったし、内容確認…
dev_db_1じゃないの、違う名前がいいの…

そんな時も解決方法は上記MySQLのバージョンを間違えた場合と同じようにイメージとdataを消し去ってから再度コンテナを作り直して下さい。




# Fatal error: require(): Failed opening required '/project/vendor/autoload.php' (include_path='.:') in /project/artisan on line 18

いざlaravel動かすぞ〜と思った矢先、動かせない

そんな時はこれで解決

```
/var/www/app# $ composer install
```

git cloneしたアプリだとvenderがないのでエラーが起こるようです。

インストールできたらOK！

```
Package manifest generated successfully.
87 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
```


# SQLSTATE[HY000]: General error: 1017 Can't find file: './app/migrations.frm' (errno: 13 - Permission denied)

マイグレーションしようとしたらこんなエラーが

```
SQLSTATE[HY000]: General error: 1017 Can't find file: './app/migrations.frm' (errno: 13 - Permission denied)
```

こちらも権限がないため書き込みができない状態になっています。

自分のMySQLディレクトリの権限がどうなってるか確認しましょう

```
$ docker exec -it laradock_mysql_1 bash
# cd var
# cd lib
# cd mysql
/var/lib/mysql# ls
auto.cnf    ca.pem           client-key.pem  ib_buffer_pool  ib_logfile1  ibtmp1  performance_schema  public_key.pem   server-key.pem  app
ca-key.pem  client-cert.pem  default         ib_logfile0     ibdata1      mysql   private_key.pem     server-cert.pem  sys
```

データベースの内容と諸々のファイルがでてきたらここのディレクトリです。

```
/var/lib/mysql# ls -l
total 188484
-rw-r----- 1 1000 1000       56 Jun  3 09:47 auto.cnf
-rw------- 1 1000 1000     1676 Jun  3 09:47 ca-key.pem
-rw-r--r-- 1 1000 1000     1112 Jun  3 09:47 ca.pem
-rw-r--r-- 1 1000 1000     1112 Jun  3 09:47 client-cert.pem
-rw------- 1 1000 1000     1680 Jun  3 09:47 client-key.pem
drwxr-x--- 2 1000 1000     4096 Jun  3 09:47 default
-rw-r----- 1 1000 1000     1359 Jun  3 09:47 ib_buffer_pool
-rw-r----- 1 1000 1000 50331648 Jun  3 10:24 ib_logfile0
省略
```

全部が1000になっていますね、これを全てmusqlに変更しましょう。

これで解決

```
# chown -R mysql:mysql /var/lib/mysql
```


権限を確認

```
# ls -l
total 188484
-rw-r----- 1 mysql mysql       56 Jun  3 09:47 auto.cnf
-rw------- 1 mysql mysql     1676 Jun  3 09:47 ca-key.pem
省略
```

これでいけそうですね。

mysqlコンテナから抜けてworkspaceコンテナからapp直下にはいり、migrateを実行してください

```
docker exec -it laradock_workspace_1 bash
# php artisan migrate
```


# webページを開くと、No application encryption key has been specified.となる

workspaceコンテナの内部で、APP KEYを作成してください。

```
# php artisan key:generate
Application key set successfully.
# php artisan config:cache
Configuration cache cleared!
Configuration cached successfully!
```



##参考

[【Laravel】Laradockで複数プロジェクトを動かす手順](https://pensuke.work/posts/laradock-multiproject/)


[https://laradock.io/getting-started/#B](https://laradock.io/getting-started/#B)

[Laradock環境MySQLで新しいDBを追加する](https://www.out48.com/archives/5111/)

[Laradock で mysql がうまく動作しない時は ( mysqlコンテナが起動しない、migration 出来ない）]
(https://qiita.com/don-bu-rakko/items/cd8f96cc9087abf601e3)

[[MySQL]権限の確認と付与](https://qiita.com/shuntaro_tamura/items/2fb114b8c5d1384648aa)

[hostsファイルの場所　Windows10]
(https://ex1.m-yabe.com/archives/4560)

[No application encryption key has been specified.となったときの対応方法]
(https://qiita.com/ponsuke0531/items/197c76fcb9300d7c5f36)

[MySQL, copying tables files gives rise to “ERROR 1017 (HY000): Can't find file:” even though its there there]
(https://stackoverflow.com/questions/12106727/mysql-copying-tables-files-gives-rise-to-error-1017-hy000-cant-find-file/12108426)

[ERROR 1017 (HY000): Can’t find file: ‘./….frm’ (errno: 13) – MySQL error. How to fix?](https://poopcode.com/error-1017-hy000-cant-find-file-frm-errno-13-mysql/)

[mysqlを5.5 -> 5.6にバージョンアップしたら、Can't find file: './mysql/plugin.frm' (errno: 13 - Permission denied)で起動こける](https://qiita.com/munaita_/items/f90269818040b2b2781f)

[既にあるLaradock環境をそのままに複数のLaradock環境を構築する（Windows）](https://www.out48.com/archives/5373/)

[docker-composeとdockerコマンドまとめ](https://qiita.com/tomo62/items/d966908cbc79a4c52dc7)

[Laradock nginxでの404 not found]
(https://www.suzu6.net/posts/138-laradock-nginx-404-not-found/)

[Laravelのエラー：Fatal error: require(): Failed opening required '/project/vendor/autoload.php' (include_path='.:') in /project/artisan on line 18](https://qiita.com/chimayu/items/82d9d457a056829b3b2e)

[LaradockでLaravel+Docker環境構築(mac)](https://qiita.com/rei67/items/e4a9a020c4fc91ffb1a2)