質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

1回答

9052閲覧

Laravelでartisan migrateができない。

afroscript

総合スコア148

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

1クリップ

投稿2019/08/14 02:02

編集2019/08/14 02:31

前提・実現したいこと

Docker上でLaravelを用いたアプリ開発をしようとしています。

発生している問題・エラーメッセージ

下記の記事を元にDocker上でLaravelを動かすことはできたのですが、
https://qiita.com/A-Kira/items/1c55ef689c0f91420e81

次に下記記事に沿って、Laravelを触ってみようとしたところで詰まってしまいました。

https://qiita.com/sano1202/items/6021856b70e4f8d3dc3d

2.マイグレーションの実行の部分ですが、マイグレーションファイルを作成し、php artisan migrateで、マイグレーションの実行を行ったところ、次のようなerrorが出ました。

Illuminate\Database\QueryException : SQLSTATE[HY000] [2002] Connection refused (SQL: select * from information_schema.tables where table_schema = database and table_name = migrations and table_type = 'BASE TABLE') at /var/www/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::("SQLSTATE[HY000] [2002] Connection refused") /var/www/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70 2 PDO::__construct("mysql:host=127.0.0.1;port=3306;dbname=database", "root", "root", []) /var/www/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70 Please use the argument -v to see more details.

※追記
マイグレーションファイルはこちらです。記事に従ってphp artisan make:migration create_books_table --create=booksで作成しました。

<?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateBooksTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('books', function (Blueprint $table) { $table->bigIncrements('id'); $table->string('name', 50); $table->integer('price'); $table->string('author', 50)->nullable(); $table->timestamps(); }); // Schema::create('books', function (Blueprint $table) { // $table->bigIncrements('id'); // $table->timestamps(); // }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('books'); } }

試したこと

現状、.envファイルのDB部分は、下記のようになっております。

DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=database DB_USERNAME=root DB_PASSWORD=root

docker exec -it db-host bashでmySQLコンテナに入り、USERNAM/PASSWORDともにrootでログインしましたが、問題なくログインできます。

databaseというデータベースも存在してました。

mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | database | | mysql | | performance_schema | | sys | +--------------------+

また、(関係ある試みか分からないですが)
1つ目の記事のdocker-compose.yamlファイル内で、MYSQL_USER: docker/MYSQL_PASSWORD: dockerも作っていたので、.envファイルを下記のように書き換えてphp artisan migrateを実行しても同様のerrorでした。

DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=database DB_USERNAME=docker DB_PASSWORD=docker

補足情報(FW/ツールのバージョンなど)

Docker: 19.03.1
PHP: 7.2.21
Laravel: 5.8.31
MySQL:5.7.27

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/08/14 02:10

マイグレーションファイル、についても掲載してください。
退会済みユーザー

退会済みユーザー

2019/08/14 02:33

.envを編集した後で、 php artisan config:clear は実行しましたか?
afroscript

2019/08/14 02:44

してないです...!してみます!
afroscript

2019/08/16 00:55

(すみません、お返事おそくなりました;;) php artisan config:clear を実行してもerror変わらずでした...!
退会済みユーザー

退会済みユーザー

2019/08/16 02:04

じゃあ、./bootstrap/cache の中を一旦削除すれば良いと思います。 きっと ./bootstrapに書き込み権限がないのでしょう
afroscript

2019/08/16 02:25

./bootstrap/cacheの中にpackage.phpというファイルとservices.phpというファイルがあったのですが、これら2つを削除して`php artisan migrate`を実行してもerror変わらずでした...! (そして実行後、再度package.phpとservices.phpが生成されてました)
退会済みユーザー

退会済みユーザー

2019/08/16 02:34

まさかとは思いますが、仮想環境でやってないのでは?
afroscript

2019/08/16 02:43

おそらく仮想環境でやれていると思います。(ただ、Dockerの理解がまだ全然なのでちょっとなの不安ですが...) $ docker-compose up -d でdockerを起動して、 $ docker-compose exec php bash で、PHPのコンテナに入って、そこで`php artisan migrate`のコマンドを打っています。 合ってますかね...??; (何度もお手間かけて申し訳ないです...;;)
退会済みユーザー

退会済みユーザー

2019/08/16 02:54

bootstrap/cache/config.php を確認して 'mysql' の設定が正しく記述されているか確認してください
afroscript

2019/08/16 02:58

bootstrap/cache下に、config.phpがないです...!
退会済みユーザー

退会済みユーザー

2019/08/16 03:06

bootstrap に書き込み権限がないのでは?
afroscript

2019/08/16 03:15

` ls -l`で確認したところ、bootstrapディレクトリには、読み取り権限も書き込み権限もありました! (drwxr-xr-x 4 afroscript staff 128 8 7 17:24 bootstrap と表示されました)
退会済みユーザー

退会済みユーザー

2019/08/16 03:20

ownerにしか書き込み権限ないじゃないですか。
afroscript

2019/08/16 03:29

あ、なるほど。読み方よく分かってませんでした;;(調べて理解しました) 権限を変更し、 drwxrwxrwx 4 afroscript staff 128 8 7 17:24 bootstrap としました。 しかし、再度`php artisan migrate`をしてもerror内容は変わらずでした...;;
退会済みユーザー

退会済みユーザー

2019/08/16 03:31

migrationする前に php artisan config cache しないと、bootstrap/cache/config.php は作られません。
afroscript

2019/08/16 03:41 編集

`php artisan config:cache` 実行しました。./bootstrap/cache/config.phpが作られていること確認しました! しかし、migrationのerrorは変わらずでした;; ちなみにconfig.php内のmysqlの設定は下記のようになっておりました。 ``` 'mysql' => array ( 'driver' => 'mysql', 'url' => NULL, 'host' => '127.0.0.1', 'port' => '3306', 'database' => 'database', 'username' => 'root', 'password' => 'root', 'unix_socket' => '', 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', 'prefix_indexes' => true, 'strict' => true, 'engine' => NULL, 'options' => array ( ), ), ```
退会済みユーザー

退会済みユーザー

2019/08/16 03:41

これでconnection refuse なら、ID,パスワードが間違っているしか可能性はありません。
afroscript

2019/08/16 04:00

そうですか...;; $ docker exec -it db-host bash でMySQLのコンテナに入って、 root@2c7094b2aef2:/# mysql -u root -p Enter password: でパスワードもrootで入れるので、おそらくIDとパスワードも合ってはいると思うのですが。。。 もしまた何か可能性ありそうな点がありましたら、教えていただけると幸いです...!;;
退会済みユーザー

退会済みユーザー

2019/08/16 04:03

mysql -h 127.0.0.1 -u root -proot を実行したらどうなります?
afroscript

2019/08/16 04:08

パスワード入力などなくログインできました! ``` mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3 Server version: 5.7.27 MySQL Community Server (GPL) Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> ```
退会済みユーザー

退会済みユーザー

2019/08/16 04:09

DB_DATABASE=database これに該当するデータベースを作成していないのでは?
afroscript

2019/08/16 04:12

できているかと思われます...!show databases;の結果が下記です。 mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | database | | mysql | | performance_schema | | sys | +--------------------+
退会済みユーザー

退会済みユーザー

2019/08/16 04:15

mysql -h 127.0.0.1 -u root -proot --database=database を実行したら?
afroscript

2019/08/16 04:17

さきほどと同様に、パスワード入力などなくログインできました! root@2c7094b2aef2:/# mysql -h 127.0.0.1 -u root -proot --database=database mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 4 Server version: 5.7.27 MySQL Community Server (GPL) Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
退会済みユーザー

退会済みユーザー

2019/08/16 04:18

migration実行時の応答はどうなりますか?
afroscript

2019/08/16 04:20

変わらずです...!;; (migrationの前に`php artisan config:clear`等はしてないですが、ここでも必要ですかね...??)
退会済みユーザー

退会済みユーザー

2019/08/16 04:21

変わらずという回答は欲しくないのでどうなりますかと聞きました
afroscript

2019/08/16 04:24

失礼しました;;同じerrorが返ってきました。 root@3f10f09d6bcb:/var/www# php artisan migrate Illuminate\Database\QueryException : SQLSTATE[HY000] [2002] Connection refused (SQL: select * from information_schema.tables where table_schema = database and table_name = migrations and table_type = 'BASE TABLE') at /var/www/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::("SQLSTATE[HY000] [2002] Connection refused") /var/www/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70 2 PDO::__construct("mysql:host=127.0.0.1;port=3306;dbname=database", "root", "root", []) /var/www/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70 Please use the argument -v to see more details.
退会済みユーザー

退会済みユーザー

2019/08/16 04:32

mysql -h 127.0.0.1 -u root -proot でログインして、 drop database `database`; を実行するとどうなりますか?
afroscript

2019/08/16 04:39 編集

このようになりました! mysql> drop database `database`; Query OK, 0 rows affected (0.02 sec) `database`は消えたようです。 mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+
退会済みユーザー

退会済みユーザー

2019/08/16 04:40

composer dump-autoload をやってから、 migrationしたらどうなりますか?
afroscript

2019/08/16 04:44

このようになりました!(error変わらずです;;) root@3f10f09d6bcb:/var/www# composer dump-autoload Generating optimized autoload files> Illuminate\Foundation\ComposerScripts::postAutoloadDump > @php artisan package:discover --ansi Discovered Package: beyondcode/laravel-dump-server Discovered Package: fideloper/proxy Discovered Package: laravel/tinker Discovered Package: nesbot/carbon Discovered Package: nunomaduro/collision Package manifest generated successfully. Generated optimized autoload files containing 3628 classes root@3f10f09d6bcb:/var/www# php artisan migrate Illuminate\Database\QueryException : SQLSTATE[HY000] [2002] Connection refused (SQL: select * from information_schema.tables where table_schema = database and table_name = migrations and table_type = 'BASE TABLE') at /var/www/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::("SQLSTATE[HY000] [2002] Connection refused") /var/www/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70 2 PDO::__construct("mysql:host=127.0.0.1;port=3306;dbname=database", "root", "root", []) /var/www/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70 Please use the argument -v to see more details.
退会済みユーザー

退会済みユーザー

2019/08/16 04:53

もうお手上げ
afroscript

2019/08/16 04:59

了解です...!ここまで時間使って頂き、本当にありがとうございます...!! なんとかもがいてみます...!;;
guest

回答1

0

ベストアンサー

docker exec -it db-host bashでmySQLコンテナに入り、USERNAM/PASSWORDともにrootでログインしましたが

こちらを拝見して気になったのですが、「MySQLコンテナ」と「Laravelが動いているコンテナ」は別ですよね?

もしそうだとしたら、「mySQLコンテナに入ってログインできた」は「Laravelが動いているコンテナからログインできる」とイコールではありませんので、「Laravelが動いているコンテナ」からはログインできないのでは?

■確認
MySQLコンテナではなく「Laravelが動いているコンテナ」で mysql -h 127.0.0.1 -u root -proot を実行したらどうなりますか?(「Laravelが動いているコンテナ」にmysqlコマンドがインストールされていないようでしたら、インストールした上で確認してください)

■仮説
上記がログインできないとすると、おそらく、.envファイルの

DB_HOST=127.0.0.1

この設定が誤っているのではないかと思います。
127.0.0.1 は、通常は自分自身のサーバーのIPアドレスです。
MySQLコンテナからは(自分自身なので)この値で接続できますが、Laravelが動いているコンテナからの接続時には(自分自身ではないので)通常使用されないと思われます(proxy設定等を駆使して、応用的に使うこともありますが……)。

■(仮説が正しいとして)対応
https://qiita.com/maejima_f/items/34cf3b8eb5ffbe256ad9
でLaravelプロジェクトのコンテナとMySQLのコンテナの接続方法を解説しているので、そちらが参考になるのではないでしょうか?(私は動作未検証ですが)


コメントを受けて追記。

「Laravelが動いているコンテナ」で
mysql -h 172.20.0.3 -u root -proot
を実行したら接続できますか?

もし接続できるようであれば、.envファイルの修正はしましたか?

DB_HOST=127.0.0.1

→この設定は、MySQLのIPアドレスとして[127.0.0.1]=自分自身のサーバーを指定しているので、ここを[172.20.0.3]に変更する必要があります。


気づいたことがあったので、さらに追記(上記の追記事項はそのまま確認をすすめてください)。

回答コメントに添付していただいたエラーメッセージに

2 PDO::__construct("mysql:host=mysql;port=3306;dbname=database", "root", "root", [])

と書かれているのですが、 mysql:host=mysql; の部分、本来は mysql:host=172.20.0.3; 、要するに「host=[MySQLのIPアドレス];」になるのが正しいです。

質問時のエラーメッセージは

2 PDO::__construct("mysql:host=127.0.0.1;port=3306;dbname=database", "root", "root", [])

となっており、(127.0.0.1 という誤ったIPアドレスではありますが)フォーマット的には正しいです。

今回の修正で、誤って .envファイルのDB_HOSTの設定を消してしまったり、 DB_HOST=mysql と書いたりしていませんか?

投稿2019/08/16 09:45

編集2019/08/20 05:10
nak

総合スコア696

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

afroscript

2019/08/20 03:22 編集

ご返信おそくなり、申し訳ございません。ご回答ありがとうございます! >「mySQLコンテナに入ってログインできた」は「Laravelが動いているコンテナからログインできる」とイコールではありませんので、「Laravelが動いているコンテナ」からはログインできないのでは? なるほど...!その点、まさに勘違いしておりました;;接続の設定が必要なのですね...! >「Laravelが動いているコンテナ」で mysql -h 127.0.0.1 -u root -proot を実行したらどうなりますか? ERROR 2002 (HY000): Can't connect to MySQL server on '127.0.0.1' (115) となり、確かにログインできませんでした。 ーーーーー ご提示頂いたQiita記事に沿って、やってみたのですが、やはり`php artisan migrate`で同様のerrorが出てしまいました。 やってみたことは下記なのですが、どこか変だったりしますでしょうか...??もし変な部分があればご指摘いただけると幸いです。。 ■Laravelが動いているコンテナ情報を確認 docker inspect 3f10f09d6bcb ■下記のIPアドレスを確認できた "IPAddress": "172.20.0.3", ■MySQLが動いているコンテナでユーザーを作成 mysql> create user 'root'@'172.20.0.3' identified by 'root'; Query OK, 0 rows affected (0.03 sec) ■データベースを作成 mysql> create database test_db1 charset=utf8; Query OK, 1 row affected (0.01 sec) ■さきほど作成したユーザーに権限を付与 mysql> GRANT ALL PRIVILEGES ON *.* TO "root"@"172.20.0.3"; Query OK, 0 rows affected (0.01 sec) ■マイグレーションファイルを作成 root@3f10f09d6bcb:/var/www# php artisan make:migration test_db1_table Created Migration: 2019_08_20_022045_test_db1_table ■php artisan migrateを実行 root@3f10f09d6bcb:/var/www# php artisan migrate ^[^[ Illuminate\Database\QueryException : SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known (SQL: select * from information_schema.tables where table_schema = database and table_name = migrations and table_type = 'BASE TABLE') at /var/www/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(): php_network_getaddresses: getaddrinfo failed: Name or service not known") /var/www/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70 2 PDO::__construct("mysql:host=mysql;port=3306;dbname=database", "root", "root", []) /var/www/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70 Please use the argument -v to see more details.
afroscript

2019/08/20 06:00

追記ありがとうございます! ``` 「Laravelが動いているコンテナ」で mysql -h 172.20.0.3 -u root -proot を実行したら接続できますか? ``` こちらについて、実行できずでした...!下記のようにerrorでした;; root@3f10f09d6bcb:/var/www# mysql -h 172.20.0.3 -u root -proot ERROR 2002 (HY000): Can't connect to MySQL server on '172.20.0.3' (115) userの作成はちゃんとできていると思うのですが...! mysql> SELECT user, host FROM mysql.user; +---------------+------------+ | user | host | +---------------+------------+ | docker | % | | root | % | | root | 172.20.0.3 | | mysql.session | localhost | | mysql.sys | localhost | | root | localhost | +---------------+------------+ 6 rows in set (0.00 sec) ーーーーーー >今回の修正で、誤って .envファイルのDB_HOSTの設定を消してしまったり、 DB_HOST=mysql と書いたりしていませんか? こちら、修正したのでした、、すみません。 Qiita記事で、マイグレーションファイルを作成したあとに、.envをそのように変更するという記述があったので、変更したのでした。 現在は.envは下記のように修正しなおしました。 DB_CONNECTION=mysql DB_HOST=172.20.0.3 DB_PORT=3306 DB_DATABASE=test_db1 DB_USERNAME=root DB_PASSWORD=root
afroscript

2019/08/21 03:27

下記でmigrateできるようになりました!...が、これであってますでしょうか...?? ■mysqlが動いているコンテナ情報を確認 docker inspect 2c7094b2aef2 ■mysqlが動いているコンテナのIP情報が下記であることが確認できた "IPAddress": "172.20.0.2", ■.envを下記のように修正 DB_CONNECTION=mysql DB_HOST=172.20.0.2 DB_PORT=3306 DB_DATABASE=test_db1 DB_USERNAME=root DB_PASSWORD=root ■ php artisan config:clearを実行 root@3f10f09d6bcb:/var/www# php artisan config:clear Configuration cache cleared! ■php artisan migrateを実行 root@3f10f09d6bcb:/var/www# php artisan migrate Migrating: 2014_10_12_000000_create_users_table Migrated: 2014_10_12_000000_create_users_table (0.09 seconds) Migrating: 2014_10_12_100000_create_password_resets_table Migrated: 2014_10_12_100000_create_password_resets_table (0.05 seconds) Migrating: 2019_08_20_021523_create_books_table Migrated: 2019_08_20_021523_create_books_table (0.03 seconds) Migrating: 2019_08_20_022045_test_db1_table Migrated: 2019_08_20_022045_test_db1_table (0 seconds)
nak

2019/08/21 04:11

問題ないと思います。お疲れ様でした。 ちなみに、そちらでアクセスできる理由ですが、おそらく ``` mysql> SELECT user, host FROM mysql.user; +---------------+------------+ | user | host | +---------------+------------+ | root | % | ``` があるためかと思われます。 ※"%"はワイルドカード=localhost以外のどこからでもアクセスできます。 https://b.l0g.jp/mysql/user-at-localhost/ もしかしたらご存知かもしれませんが、今回の修正について簡単に説明させていただきます。 IPアドレスとは? :サーバー(やコンテナ)の住所。 IPアドレス=127.0.0.1 :「自分自身(のサーバーやコンテナ)」を表す特別な住所表記。いわゆる「俺ん家」  Aサーバーで「127.0.0.1」を指定すればAサーバーを指すし、Bサーバーで「127.0.0.1」を指定すればBサーバーを指す。 今回の対応: 質問の時点では、「MySQLコンテナの住所」を書かなければならないところに「俺ん家(127.0.0.1)」と書かれていた。 ※「俺ん家」、つまり、「Laravelが動いているコンテナの住所」なので、これでは接続できない(「MySQLコンテナ」は別の住所にあるので)。 ↓ 「MySQLコンテナの住所」を正しい住所(172.20.0.2)に書き直した。 ↓ 接続できた。 ※途中でrootユーザーに「172.20.0.3」からのアクセス権を付与したりしていただいていますが、この設定は無くても問題なかったと思われます(rootユーザーに「%(ワイルドカード)」が設定されているため)。 なお、 > DB_HOST=mysql ですが、Dockerコンテナのラベルにこの名前が設定されている場合、この名前で接続できるようですね。失礼いたしました。 この辺りはあまり知見がないため、コメントは差し控えさせていただきます。
afroscript

2019/08/21 04:32

問題ないとのことでよかったです! 細かい解説までして頂き、ありがとうございます! >ちなみに、そちらでアクセスできる理由ですが、おそらく このあたりもなんとなくしか分かってなかったので、非常に勉強になります!!mm >ですが、Dockerコンテナのラベルにこの名前が設定されている場合、この名前で接続できるようですね。失礼いたしました。 >この辺りはあまり知見がないため、コメントは差し控えさせていただきます。 ここもよく分からなかったので、Dockerについてもっと調べてみます! 本当にありがとうございました!とてもとても助かりました!!!
afroscript

2019/08/27 01:04

<追記> DB_HOSTのところは、docker-compose.yamlで定義したサービス名になるみたいです。 今回は、docker-compose.yamlで下記のように記述してました。 ``` db: image: mysql:5.7 container_name: db-host environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: database MYSQL_USER: docker MYSQL_PASSWORD: docker TZ: 'Asia/Tokyo' command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci volumes: - ./docker/db/data:/var/lib/mysql - ./docker/db/my.cnf:/etc/mysql/conf.d/my.cnf - ./docker/db/sql:/docker-entrypoint-initdb.d ports: - 3306:3306 ``` なので、.envファイルを下記のように変更したらOKでした! ``` DB_CONNECTION=mysql DB_HOST=db DB_PORT=3306 DB_DATABASE=test_db1 DB_USERNAME=root DB_PASSWORD=root ``` 参考:https://qiita.com/wjtnk/items/9e553f90f38e279a8b99
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問