はじめに
コンテナの初回起動(DBマイグレーション)時に表題エラーが発生しました。
こちらの記事の方法を試すも、直らず。。。
同事象の方の参考になれば幸いです。
エラー内容
Docker Composeでイメージビルドとコンテナを起動し、コンテナ内でマイグレーションを実行すると下記エラーが発生
$ docker-compose exec app php artisan migrate:fresh --seed
Illuminate\Database\QueryException
SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known (SQL: SHOW FULL TABLES WHERE table_type = 'BASE TABLE')
at vendor/laravel/framework/src/Illuminate/Database/Connection.php:671
667| // If an exception occurs when attempting to run a query, we'll format the error
668| // message to include the bindings with SQL, which will make this exception a
669| // lot more helpful to the developer instead of just the database's errors.
670| catch (Exception $e) {
> 671| throw new QueryException(
672| $query, $this->prepareBindings($bindings), $e
673| );
674| }
675|
+45 vendor frames
46 artisan:37
Illuminate\Foundation\Console\Kernel::handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
DB接続で落ちているエラーっぽい。
試しにコンテナ起動をしてみると、
$ docker-compose up
Docker Compose is now in the Docker CLI, try `docker compose up`
// 略
db_1 | 2021-07-17 02:15:11+00:00 [ERROR] [Entrypoint]: MYSQL_USER="root", MYSQL_USER and MYSQL_PASSWORD are for configuring a regular user and cannot be used for the root user
db_1 | Remove MYSQL_USER="root" and use one of the following to control the root user password:
db_1 | - MYSQL_ROOT_PASSWORD
db_1 | - MYSQL_ALLOW_EMPTY_PASSWORD
db_1 | - MYSQL_RANDOM_ROOT_PASSWORD
XXXX_db_1 exited with code 1
MYSQL_USERとMYSQL_PASSWORDには、rootを使用するな(通常ユーザーを使用しろ)というエラーっぽいですね。
root以外の任意の値を指定すれば良さそうです。
これで解決
.envのDB_USERNAMEのvalue値(root)を削除して、
// 略
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3308
DB_DATABASE=laravel
DB_USERNAME=
DB_PASSWORD=
// 略
コンテナ再起動して、DBマイグレーション再実行で解決!
docker-compose down
docker-compose up -d
docker-compose exec app php artisan migrate:fresh --seed
// エラー出ない!よっしゃ!
最後に
MYSQL_USER="root", MYSQL_USER and MYSQL_PASSWORD are for configuring a regular user and cannot be used for the root user
これを読むと、MYSQL_USER(とPASSWORD)は通常ユーザーのためのもので、rootユーザーには使用できないと書かれてますね。
前は、rootのままで行けた気がしますが。。。とりあえず直ったのでよし!ですね!!!