4
0

More than 3 years have passed since last update.

php artisan migrate でSQLSTATE[HY000] [2002]のエラーが出る

Posted at

はじめに

一度、コンテナなどを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.

実際のターミナル画面
スクリーンショット 2021-08-25 15.23.33.png

以下のエラーは、DB_HOSTが異なる場合に表示される。

SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known

これは、.envで設定しているDB_HOSTの値と、docker-compose.ymlservicesで設定しているDBの名前が一致していないと起こることもある。

.env
DB_HOST=db
docker-compose.yml
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でエラーになった時の対処法をまた一つ知ることができました。

参考

4
0
2

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
4
0