我在MacOs的docker容器中运行laravel和mysql时遇到了相同的问题。
我发现问题出在.env文件里。
.env文件中默认配置为:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=my_db_name
DB_USERNAME=sail
DB_PASSWORD=password
一些回答建议将DB_HOST更改为:
DB_HOST = localhost
但是对于我来说,它没有起作用...
通过一些研究,我发现在运行 Docker 中的 Laravel 时,DB_HOST 需要期望在 Docker 中运行的数据库服务,在我们的情况下,服务是 MySQL。
因此,我不得不将 .env 更改为以下内容:
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=my_db_name
DB_USERNAME=sail
DB_PASSWORD=password
我还修改了config/database.php文件中的DB_HOST。
'mysql' => [
'driver' => 'mysql',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', 'mysql'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'my_db_name'),
'username' => env('DB_USERNAME', 'sail'),
'password' => env('DB_PASSWORD', 'password'),
'unix_socket' => env('DB_SOCKET', ''),
'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'),
]) : [],
],
直到那时,一切才开始正常工作。