LoginSignup
0
0

More than 1 year has passed since last update.

dockerでマイグレートができない(「Laravel+nginx+MySQL」環境)

Posted at

「php artisan migrate」を実行したらエラーが出た。。

dockerというのは色々なエラーが出るから初心者にはきついっすよね。。

コンテナ起動で苦労して、コンテナログインでも苦労して
ようやくマイグレートまできたら今度はこんなエラーが。。

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

エラーが出るまでの手順

Gitからプロジェクトをクローンして、以下の手順を踏みました。

dockerイメージ作成

$ docker-compose build --no-cache

dockerコンテナを起動

$ docker-compose up -d

コンテナログイン

$ docker-compose exec php-fpm /bin/bash

ディレクトリ移動

$ cd /var/www/html/

Laravel7系最新インストール

$ composer create-project --prefer-dist laravel/laravel=7.*.* .

キャッシュ作成

php artisan config:cache &&
php artisan key:generate &&
php artisan config:cache

マイグレーション

$ php artisan migrate

ここで上記のエラーが発生。

DB接続先を確認

「Connection refused」ということは、DBへの接続が拒否られているっぽい。。
ここで.envのDB接続についての設定を確認。

DB_HOSTを見てみるとなぜか「127.0.0.1」になっていた!
あれ?DB名の設定はこれでいいんだっけ?

ymlファイルで確認すると。。

DB_HOST=mysql(仮)

あらまあ。(笑)
というわけでymlファイルに合わせる。。

ymlファイルの「Volumes」の設定値にも関係があるらしい

上記の対応をしても解決しない場合以下のようなエラーが出ているかもしれない。

$ Access denied for user 'homestead'@'172.20.0.1' (using password: YES)

これはVolumesを削除すると解決する場合があるようです。

$ docker-compose down --volumes
$ docker-compose up -d --build

よければ試してみてください。

DBのユーザ名などを「root」にしてたら引っかかった

再度マイグレーションしようとしたら、以下のようなエラーが発生。

mysqli_connect(): php_network_getaddresses〜(以下略)

dbに接続できないってことらしい。。あれ?コンテナの状況は??
以下コマンドでログを見ると以下のエラーを発見。

$ docker-compose logs

するとこんなエラーが。。

 [ERROR] [Entrypoint]: MYSQL_USER="root", MYSQL_USER and MYSQL_PASSWORD are for configuring a regular user and cannot be used for the root user

ymlに記載しているDB情報に「root」と記載しているところがあった
(私の場合は「MYSQL_USER」)

これを任意の値に変更して再度マイグレーションを実行すると。。

Migration table created successfully.
・・・(以下略)

成功!!!

終わりに

長くなりましたが、僕の場合はこんな感じで解決できました。

経験上(浅いですが。。)「.env」や「yml」ファイルの設定値が
おかしいことがほとんどなんですよね。。

英語の文献で苦しいことも多いので、
本記事が少しでもお役に立てれば嬉しいです!

何か誤った箇所があったら教えていただけると幸いです!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0