Laravel Sail - SQLSTATE[HY000] [2002] 没有那个文件或目录

Laravel Sail - SQLSTATE[HY000] [2002] No such file or directory

我遵循了 Laravel Sail 的教程并且它工作正常,但是如果我克隆 repo (docker-compose up),在另一个机,我在尝试 运行 容器内迁移时收到以下错误:

SQLSTATE[HY000] [2002] No such file or directory (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')

已经尝试了一些解决方案,但没有任何效果。

我的database.php文件:

'mysql' => [
        'driver' => 'mysql',
        'url' => env('DATABASE_URL'),
        'host' => env('DB_HOST', '127.0.0.1'),
        'port' => env('DB_PORT', '3306'),
        'database' => env('DB_DATABASE', 'forge'),
        'username' => env('DB_USERNAME', 'forge'),
        'password' => env('DB_PASSWORD', ''),
        'unix_socket' => env('DB_SOCKET', '/var/run/mysqld/mysqld.sock'),
        'charset' => 'utf8mb4',
        'collation' => 'utf8mb4_unicode_ci',
        'prefix' => '',
        'prefix_indexes' => true,
        'strict' => true,
        'engine' => null,
        'options' => extension_loaded('pdo_mysql') ? array_filter([
            PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
        ]) : [],
    ],

我的.env文件:

DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=code_challenge
DB_USERNAME=root
DB_PASSWORD=

所以,在 database.php 我删除了套接字值:

'unix_socket' => env('DB_SOCKET', '')

并且在 .env 中我保留了以前的值。

不确定是什么原因导致了问题,但现在可以了。

因为您正在尝试通过来自不同容器的套接字连接到数据库容器。

有两个单独的容器 - Laravel 和 MySQL。将其视为两个独立的服务器。

当你在 env 中同时拥有 unix_socketdb_host 时,你告诉 laravel 通过 unix_socket 连接到指定主机上的数据库。这就是它不起作用的原因。

当您更新 unix_socket env 时,laravel 尝试通过 TCP 连接到数据库并且它工作。

P.S:我知道这个问题已经为您解决了。但是如果其他人偶然发现了这个问题,他们应该对它为什么起作用以及将来如何解决它有一些解释。