【掲示板アプリを作ろう】Docker利用したLaravelからMySQLへのConnection Error

参考

前回

Dockerのwebコンテナに入る

前回Dockerで環境構築した時に`laravel new`を叩いたコンテナだ。

つまりこう。

$ docker-compose up -d
Creating network "project_default" with the default driver
Creating phpmyadmin ... done
Creating web        ... done
Creating db-host    ... done
$ docker-compose exec web bash
root@8850b6a6d801:/var/www/html# 

【問題】DB接続エラー

先頭に貼った参考サイトを見ながらコマンドを実行していく。
まあそんな即死する事はあるまいと思っていたら即死した。

root@8850b6a6d801:/var/www/html# php artisan migrate

  Illuminate\Database\QueryException  : SQLSTATE[HY000] [2002] Connection refused (SQL: select * from information_schema.tables where table_schema = laravel and table_name = migrations and table_type = 'BASE TABLE')

 at /var/www/html/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/html/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70

 2   PDO::__construct("mysql:host=127.0.0.1;port=3306;dbname=laravel", "root", "", [])
     /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70

 Please use the argument -v to see more details.

DBとのコネクション貼るのに失敗した?

結論:.envファイル間違い

.envファイルを書き換えなければならない事はなんとなく分かっていたものの、すべての項目に実施していなかった。

特に気付かなかったのはDB_HOSTの値で、これをlocalhostのままにしていた。

前回Dockerを使って環境構築した際、mysqlはコンテナの中に入れた。これにアクセスする際、docker-compose.ymlで設定したcontainer_nameがホスト名になるらしい。

他の項目の対応関係は分かりやすいが、container_nameは気付くまで時間かかってしまった。

疑問

なぜwebとphpMyAdminのコンテナにはlocalhostで入れる?

docker-compose.ymlのどこを見てもルーティングしてそうな箇所は見つけられない。。。

【調査ログ】.env反映が上手く行っていない場合

.envのどの項目を直せば良いか手探りだった時に、書き直した.envが反映されていないのではと考えられたため、その場合の対処方法についても調べた。

上記含め幾つか参考にキャッシュ削除の方法はあるようだ。
次回以降、.envファイルの調査に集中するために覚えておく。

この記事が気に入ったらサポートをしてみませんか?