gpt4 book ai didi

laravel - Laradock 不支持 mysql

转载 作者:行者123 更新时间:2023-12-02 18:42:13 24 4
gpt4 key购买 nike

我无法理解如何让 Laradock 与 mysql 数据库一起正常工作。

我已经按照 laradock 文档安装了所有内容,使用启动容器

docker-compose up -d nginx mysql

我有这样的多项目版本布局

project
+laradock-spa

php 端似乎可以工作,我可以打开 laravel 欢迎页面,但是连接数据库给我带来了问题。

首先,我应该在哪里运行 php artisan 命令,例如 php artisan migrate ?应该从我的机器的项目文件夹中运行,还是从 docker 容器中运行?

当我从项目文件夹运行它时,它可以工作,我可以进入 mysql 容器并查看初始数据库表,例如 migrationuser

但是,我无法在 Postman 中对数据库进行初始 POST - 我收到错误 SQLSTATE[HY000] [2002] 没有这样的文件或目录(SQL:插入用户(...) >

所以我想也许我应该从工作区容器内运行 migrate 命令,所以我猛击到工作区,但从这里 php artisan migrate 命令错误 [照亮\数据库\QueryException]
SQLSTATE[HY000] [2002] 没有这样的文件或目录(SQL:select * from information_schem
a.tables,其中 table_schema = spa 和 table_name = 迁移)

正如我所说,我可以成功进入 mysql 容器,并使用 root 密码登录数据库,并且在运行第一次迁移后,我可以看到其中的表。

docker ps 显示所有容器。

有人可以解释一下它是如何工作的以及如何解决这个问题吗?我不确定应该在哪里运行哪些命令,以及容器如何相互通信。但基本上,如何让 mysql 数据库在 laravel 项目中工作?

顺便说一句,我的 PC 上也运行着本地 mysql,也许这会导致一些冲突/困惑?

我在 Win10 上运行这一切。

最佳答案

当您使用 Laradock 时,您需要将容器视为一个共享网络中的单独服务器/计算机。下图中的每个矩形代表一台服务器,它有自己的IP地址、自己的Linux系统等。因此,要从另一个容器连接MySQL,您需要知道该容器的IP地址或主机名。

幸运的是,Laradock 在底层提供了一些魔法来缓解这一问题,您可以使用 MySQL 主机名,而不是在配置中提供 IP 地址。如果你想启用 Redis,你所要做的就是使用 docker-compose up 启动 Redis,并在 Laravel 配置中提供 Redis 主机名。

如果涉及故障排除,docker-compose ps 是检查发生了什么情况的最佳方法。剩下的就是对多容器概念的理解。

请注意,如果不在 docker-compose.yml 中公开容器端口,则无法从主机连接到容器。容器 IP 对于主机不可见,因为它们属于虚拟网络,而不是计算机连接的真实网络。默认端口已在 docker-compose.yml 中公开,因此您可以通过 IP 127.0.0.1 和端口 3306 访问 DB,与 Nginx 的端口 80 等相同。

希望现在更清楚了:)

enter image description here

关于laravel - Laradock 不支持 mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46751816/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com