我学习了Laravel Sail的教程,它运行得很好,但是如果我在另一台机器上克隆repo(* docker-composite up*),当我试图在容器内运行迁移时,我会得到以下错误:
SQLSTATE[HY 000] [2002]没有此类文件或目录(SQL:创建表migrations
(id
整数型无符号非空自动递增主键,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=
4条答案
按热度按时间falq053o1#
因此,在database.php上,我删除了套接字值:
在.env中,我保留了以前的值。
不确定是什么原因导致了这个问题,但它现在正在工作。
7z5jn7bk2#
因为您正在尝试通过套接字从不同的容器连接到DB容器。
有两个独立的容器- Laravel和MySQL。认为它就像两个独立的服务器。
当你在env中同时有unix_socket和db_host时,你是在告诉laravel通过unix_socket连接到指定主机上的数据库,这就是为什么它不起作用。
当您更新unix_socketenv时,laravel尝试通过TCP连接到DB,并且它工作正常。
dgiusagp3#
在.env文件中,您需要更改此:
DB_HOST=mysql
lstz6jyr4#
重要的一点是,您应该注意到,如果您在系统中定义了多个本地主机,例如(127.0.0.1、0.0.0.0、...),您应该使用www.example.com定义**DB_HOST值127.0.0.1。我遇到了相同的问题,通过使用127.0.0.1设置DB_HOST值解决了该问题