はじめに
一度、コンテナなどをdownした後にもう一度upしてmigrate
しようとすると、エラーになったので解決した方法をメモします。
いち解決方法なのでご参考になれば幸いです。
条件
mac OS "11.2.3 Big Sur"
Laravel Framework "6.20.27"
PHP "8.0.7"
nginx "1.18"
mysql "8.0"
php artisan migrate ができなくなった
❶ docker-compose down
Stopping web_1 ... done
Stopping app_1 ... done
Stopping db_1 ... done
Removing web_1 ... done
Removing app_1 ... done
Removing db_1 ... done
Removing network lantern_default
❷ docker-compose up -d
Creating app_1 ... done
Creating db_1 ... done
Creating web_1 ... done
① 一度upしたコンテナ
ネットワーク
ボリューム
イメージ
を削除します。
デフォルトではコンテナとネットワークのみ削除します。
② イメージを作成、さらにコンテナを作成・起動する。
ここまではちゃんとできているように見えるのですが、appコンテナ内でmigrate
をしようとすると以下のエラー
% docker-compose exec app bash
/var/www/html# 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 = lantern and table_name = migrations and table_type = 'BASE TABLE')
at /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Connection.php:669
665| // If an exception occurs when attempting to run a query, we'll format the error
666| // message to include the bindings with SQL, which will make this exception a
667| // lot more helpful to the developer instead of just the database's errors.
668| catch (Exception $e) {
> 669| throw new QueryException(
670| $query, $this->prepareBindings($bindings), $e
671| );
672| }
673|
Exception trace:
1 PDOException::("PDO::__construct(): php_network_getaddresses: getaddrinfo failed: Name or service not known")
/var/www/html/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70
2 PDO::__construct("mysql:host=db;port=3306;dbname=lantern", "lantern_user", "lantern_pass", [])
/var/www/html/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70
Please use the argument -v to see more details.
以下のエラーは、DB_HOST
が異なる場合に表示される。
SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known
これは、.env
で設定しているDB_HOST
の値と、docker-compose.yml
のservices
で設定しているDBの名前が一致していないと起こることもある。
DB_HOST=db
services:
app:
build:
context: .
dockerfile: ./docker/php/Dockerfile
( 省略 )
web:
build:
context: .
dockerfile: ./docker/nginx/Dockerfile
( 省略 )
db: # servicesで設定しているDB名
build:
context: .
dockerfile: ./docker/mysql/Dockerfile
( 省略 )
しかし、名前が一致しているためこのことが原因ではないことがわかる。
docker-compose ps
でコンテナの様子を見る。(db落ちてる・・・。)
% docker-compose ps
Name Command State Ports
------------------------------------------------------------------------------------------
db docker-entrypoint.sh mysqld Exit 1
app_1 docker-php-entrypoint php-fpm Up 9000/tcp
web_1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:80->80/tcp,:::80->80/tcp
log
を見てみるが、[Error]
表記は見当たらない。
% docker-compose logs
(dbのlogのみ表示)
db | 2021-08-25 13:50:26+09:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.25-1debian10 started.
db | 2021-08-25 13:50:27+09:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
db | 2021-08-25 13:50:27+09:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.25-1debian10 started.
念の為、appコンテナ内でキャッシュをあらかた削除しても変化なし。
php artisan config:clear
php artisan cache:clear
php artisan route:clear
php artisan view:clear
解決
volume
を一括削除することで解決しました。
% docker volume prune
WARNING! This will remove all local volumes not used by at least one container.
Are you sure you want to continue? [y/N] y
Deleted Volumes:
ba53e7ce7cfad60548a239ec1164eaffa33b25c0f3ab6704f4c04fe98c4ed362
673fcb4811cf0029496745d2231d3c2a35ce1ee2257c23b1bb5ae3f74de02f6b
75d6dc4cd93203db7002431d2f39e3135cec328afe3222535366b2b1a6064d11
7804e118e3461ffa02cef0eea6a2f9850990f4b48e9c5b61e1a82c50c684357a
docker-laravel-env_db-store
c7f73c4d0fa34e29c75e41bd6f2e5f0d568ee348b3252d003eeadb04086d7d30
6a9a9caed760fad54e01bb66ae73e1dbbd48afe77ff2ddee1c85abc3426193da
b0e76adbcee655df609bd5ef13532d8ffb3ad64b5e5efff608aec40092355a64
5797c61813c2913ef44b9d90dd6b1cca53bc850b90aed2461d7bccaceb8e9de9
d2f7fbc5ff229dc742889062e78ed15b915ec239598ce8d004cdcb43bc6955e6
fe16849776b7f034a9a69231b9544e73afeb8e1a63fac803a439c1dd0385dc37
e08385c1d6a81c0b358511400ec183b1522956aff0516e670d9f88ad69d5c58e
5ab426718d1c9cf03ca17178637f78bcbedb0341be24361cb0689272f73b0a7b
lantern_mysql-volume
b307a1d46318a7e31248ba195de7b164b6db6f805684b7aaca81fac9cafb3112
e6678666f6b728cd69e2f4cc60ba8f01b2adf70e203625b4c6d8418e0a2f4362
6a0685551380139c2947862b799881ccc75c85f28679b3bf632474a0349c0ed4
ee2157d4d73bc7d7eac844350b58517aa7a64eab30138f9c8b201e93cb176ea1
69f2fef782f831b84162ac586f9379b7f82bde17a7c2d9686139bfdbd6b94108
647296d44ca8e9fa9ee7709ec5f26133dc3073da77cc2f3c46e83684afac87c5
Total reclaimed space: 2.817GB
かなり溜まってたみたいです。
dockerでエラーになった時の対処法をまた一つ知ることができました。
参考