💡

[docker][laravel] マイグレーションのエラー

2023/02/14に公開

マイグレーションでエラー発生

$ php artisan migrate

In Connection.php line 669:
                                                                                                                                      
  SQLSTATE[HY000]: General error: 3675 Create table/tablespace 'migrations' failed, as disk is full (SQL: create table `migrations`   
  (`id` int unsigned not null auto_increment primary key, `migration` varchar(255) not null, `batch` int not null) default character  
   set utf8mb4 collate 'utf8mb4_unicode_ci')                                                                                          
                                                                                                                                      

In Exception.php line 18:
                                                                                                     
  SQLSTATE[HY000]: General error: 3675 Create table/tablespace 'migrations' failed, as disk is full  
                                                                                                     

In PDOStatement.php line 117:
                                                                                                     
  SQLSTATE[HY000]: General error: 3675 Create table/tablespace 'migrations' failed, as disk is full  
                                                                            

disk is fullとのことだったので、docker desktopの設定、ResorcesからDisk image sizeを上げたところ別のエラーに変化した。

$ php artisan migrate

   Illuminate\Database\QueryException  : SQLSTATE[HY000] [2002] Connection refused (SQL: select * from information_schema.tables where table_schema = db 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=mysql;port=3308;dbname=db", "password", "password", [])
      /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70

  Please use the argument -v to see more details.

原因としては、mysqlのポート被りを防ぐためにホスト側で3308を使っていて、.envも3308と指定していた。
ただコンテナ側からみた際は3306で接続しているからこの変更は必要なかった。
.envを3306に戻してマイグレーションコマンドを叩くと成功した。

Discussion