Laravel Sail - SQLSTATE[HY 000] [2002]无此类文件或目录

j2datikz  于 2023-02-25  发布在  其他
关注(0)|答案(4)|浏览(98)

我学习了Laravel Sail的教程,它运行得很好,但是如果我在另一台机器上克隆repo(* docker-composite up*),当我试图在容器内运行迁移时,我会得到以下错误:
SQLSTATE[HY 000] [2002]没有此类文件或目录(SQL:创建表migrationsid整数型无符号非空自动递增主键,migration varchar(255)非空,batch整数型非空)默认字符集utf8 mb 4排序'utf8mb4_unicode_ci')
已经尝试了一些解决方案,但没有任何效果。
我的数据库.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=
falq053o

falq053o1#

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

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

在.env中,我保留了以前的值。
不确定是什么原因导致了这个问题,但它现在正在工作。

7z5jn7bk

7z5jn7bk2#

因为您正在尝试通过套接字从不同的容器连接到DB容器。
有两个独立的容器- Laravel和MySQL。认为它就像两个独立的服务器。
当你在env中同时有unix_socketdb_host时,你是在告诉laravel通过unix_socket连接到指定主机上的数据库,这就是为什么它不起作用。
当您更新unix_socketenv时,laravel尝试通过TCP连接到DB,并且它工作正常。

  • P.S:我知道这个问题已经为你解决了。但如果其他人偶然发现这个问题,他们应该有一些解释为什么它的工作和如何在未来修复它。*
dgiusagp

dgiusagp3#

在.env文件中,您需要更改此:DB_HOST=mysql

lstz6jyr

lstz6jyr4#

重要的一点是,您应该注意到,如果您在系统中定义了多个本地主机,例如(127.0.0.1、0.0.0.0、...),您应该使用www.example.com定义**DB_HOST值127.0.0.1。我遇到了相同的问题,通过使用127.0.0.1设置DB_HOST值解决了该问题

相关问题