我在MacOS上使用Laravel和Sail/Docker。
我想更改我的DB用户名和密码,只是为了尝试和测试。如果我在.env
配置(sail 2/password 2)中更改它们,然后关闭sail,然后关闭sail up -d
(甚至完全重建容器),我会看到:
- Laravel看到了新的凭证(sail 2),因为如果我修改它:
DB::select("select * from users");
它会这样抱怨:
SQLSTATE[HY000] [1045] Access denied for user 'sail2'@'172.20.0.7'
因此Laravel从环境变量中读取新的凭据,但用户没有访问数据库的权限。
- Docker本身确实看到了新的环境变量,因为通过检查mysql容器,我可以看到:
因此,我能说的是,除了新用户似乎没有被分配到当前数据库之外,所有这些都正常工作。
请注意,我也试图连接续集王牌和表加,但不工作。相反,它们将使用原始凭据(sail/password)进行连接。
2条答案
按热度按时间vc6uscn91#
不能使用
MYSQL_*
环境变量更改现有数据库的凭据。Laravel Sail只是一个 Package 器,在它下面只是使用MySQL官方Docker镜像(或者MariaDB镜像,也许,但这些效果是一样的)。
关于readme on that image:
环境变量
[...]当你启动mysql镜像时,你可以通过在docker run命令行上传递一个或多个环境变量来调整MySQL示例的配置。请注意,如果您使用已经包含数据库的数据目录启动容器,则以下变量都不会有任何影响:任何预先存在的数据库在容器启动时将始终保持不变。
(强调我的)
如果您通过在映像中挂载现有数据目录来重用该目录,则即使从头开始重建映像,也将以现有数据库结束,而环境变量将不起任何作用。
要更改凭据(或添加新凭据),您需要使用常规方法(例如,
GRANT
语句,通过您选择的客户端执行)。gijlo24d2#
我刚刚找到了一个部分解决方案。基本上,从Docker我可以以root身份登录到数据库服务器,然后从那里我可以手动添加任何我想要的用户。因此,从Docker >中单击mysql容器和click exec。
然后以root身份登录。然后添加新用户并授予权限。
那会有用的。我不确定这是否是解决我的问题的最好方法。
更新
在此期间,我收到了一些来自laracasts家伙更多的解释,我可以张贴其他几个解决方案。但最后,我仍然认为最好的方法仍然是从docker登录并从那里更改/更新用户设置。不管怎样,还有其他方法:
a.删除mysql容器上的Docker卷。这将迫使mysql从头开始重新创建用户,但也会删除其他所有内容。
B.编辑
docker-compose.yml
文件并为mysql容器指定一个新卷。这将是相同的事情作为选项2,但没有删除您的数据,它只是一个新的开始.但您仍然无法访问现有数据。作为这一办法的一种变通办法:只需删除卷行>这也将删除数据。