Laravel Sail数据库连接拒绝错误



我在laravel 8中创建了一个新的laravel项目。我已经正确设置了Sail安装,在本地数据库连接时一切正常,但当我尝试使用Sail连接数据库时,它会给我一个错误

SQLSTATE[HY000][2002]连接被拒绝(SQL:从information_schema.tables中选择*,其中table_schema=laravel8,table_name=migrations,table_type='BASE table'(

我已经清除了配置和缓存文件。

我在研究同样的问题时发现了这个问题。

https://github.com/laravel/sail/blob/7457004969dd62fa727fbc596bb2accccb1409a5/src/SailServiceProvider.php#L31

该代码显示了laravel-sail-sail:install添加的一个artisan命令,该命令用服务名称覆盖.env文件主机变量。

我将DB_HOST127.0.0.1更改为mysql,并且它是固定的

编辑以回答问题:

Sail基于Docker,要在同一Docker网络上的两个Docker容器之间建立连接,您可以通过容器名称引用容器,Docker将为您处理解析。这就是为什么我们使用mysql而不是地址

在cmd上只运行此命令

docker network inspect bridge

你会得到类似的回复:

[
{
"Name": "bridge",
"Id": "695c284c7b184839edf97d48161922dfe6c4827d0db917c3278f5634af7e00e2",
"Created": "2022-02-22T22:17:30.8583513Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.17.0.0/16",
"Gateway": "172.17.0.1"
}
]
},
.....
}

]

复制";CCD_ 6";ip地址,并替换为.env文件中的DB_HOST值。它将工作

如果您想在不同的端口运行mysql,例如3307,如下面的

ports:
- 3307:3306

应该将FORWARD_DB_PORT环境变量添加到.env文件中,如下所示

DB_PORT=3306 // this is for container port
FORWARD_DB_PORT=3307 // this is for local port

将DB_USERNAME从sail更改为root对我很有效。我想sail没有所需的权限。

DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=database
DB_USERNAME=root # changed from sail
DB_PASSWORD=password

我在docker中创建了第二个sail项目后也遇到了同样的问题。它没有(现在仍然没有(接受sail用户名或密码,但我可以使用root,这给了我你上面给出的错误。我转到Desktop Docker应用程序,单击正在运行的容器,找到mysql部分并运行CLI,键入mysql,然后运行查询CREATE DATABASE yourdatabasename;迁移运行得非常好。

也许您应该匹配.env.testing的环境变量,因为正如willpercey gb所说,sail:install命令更新.env的环境变量而不是.env.testing.

首次关闭停止所有使用brew的服务,尤其是MySQL

brew services stop MySQL

在你的docker yaml文件中:

laravel.test
ports:
- '70:80'
mysql:
ports:
- '3456:3306'

现在运行您的sail artisan migrate命令。

这应该能解决你的问题。

相关内容

最新更新