我在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_HOST
从127.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命令。
这应该能解决你的问题。