0

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

SQLSTATE[HY000] [2002] 没有这样的文件或目录(SQL:创建表 migrationsidint unsigned not null auto_increment 主键, migrationvarchar(255) not null,batchint not null)默认字符集 utf8mb4 collat​​e '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=
4

2 回答 2

1

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

有两个独立的容器——Laravel 和 MySQL。把它想象成两个独立的服务器。

当您在 env 中同时拥有unix_socketdb_host时,您是在告诉 laravel 通过 unix_socket 连接到指定主机上的 db。这就是为什么它不起作用。

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

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

于 2021-05-23T17:03:42.453 回答
0

因此,在 database.php 上,我删除了套接字值:

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

在 .env 中,我保持了以前的值。

不知道是什么导致了问题,但它现在正在工作。

于 2021-05-23T13:31:09.063 回答