Laravel Laradock不使用mysql

Laravel Laradock不使用mysql,laravel,docker,docker-compose,laradock,Laravel,Docker,Docker Compose,Laradock,我无法理解如何让Laradock正确使用mysql数据库 我遵循laradock文档,使用 docker-compose up -d nginx mysql 我有这样的多项目版本布局 project +laradock-spa php端似乎可以工作,我可以打开laravel欢迎页面,但是连接DB会给我带来问题 首先,我应该在哪里运行php artisan命令,比如php artisan migrate?应该从项目文件夹中的my machine运行,还是从docker容器中运行 当我从

我无法理解如何让Laradock正确使用mysql数据库

我遵循laradock文档,使用

docker-compose up -d nginx mysql
我有这样的多项目版本布局

project
    +laradock-spa
php端似乎可以工作,我可以打开laravel欢迎页面,但是连接DB会给我带来问题

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

当我从我的项目文件夹运行它时,它工作了,我可以进入mysql容器,查看初始的db表,比如迁移和用户

但是,我无法获得在Postman内工作的db的初始帖子-我得到错误SQLSTATE[HY000][2002]没有这样的文件或目录SQL:insert into users

所以我想也许我应该从工作区容器中运行migrate命令,所以我猛击到工作区,但是从这里php artisan migrate命令错误为[illumb\Database\QueryException] SQLSTATE[HY000][2002]没有这样的文件或目录SQL:select*from information\u schem a、 表_schema=spa和表_name=migrations的表

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

docker ps向上显示所有容器

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

顺便说一句,我的本地mysql也在电脑上运行,也许这会引起一些冲突/混乱


我在Win10上运行所有这些功能。

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

幸运的是,Laradock在幕后提供了一点魔法来缓解这种情况,您可以使用MySQL主机名,而不是在配置中提供IP地址。如果您想启用Redis,只需使用docker compose启动Redis,并在Laravel配置中提供Redis主机名

如果涉及到故障排除,docker compose ps是检查发生了什么的最好方法。其余部分是对多容器概念的理解

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

希望这一点现在更清楚一些:

我只是想让您能够通过设置

WORKSPACE_INSTALL_MYSQL_CLIENT=true
在.env文件中并运行

 docker-compose build workspace
然后你可以用

docker-compose exec workspace bash
做你的迁徙或任何你内心渴望的事情

您还需要在database.php配置中将mysql主机设置为mysql


并确保编辑项目的.env文件并添加DB_HOST=mysql。

事实证明.env需要DB_HOST=mysql才能工作。我仍然很困惑,但我会把它留在这里,以防它对其他人有帮助。啊,这对我来说也很有用。在此之前,值是DB_HOST=127.0.0.1,因此我们必须更改它。该localhost假定MySQL安装在同一个工作区容器中,但实际上,MySQL安装在另一个容器中。因此,DB_主机是一个外部容器。提供信息,但没有向@Yoma解释如何解决他的问题。修改.env是正确的答案。另外,Laravel的MySQL端口3306暴露在外面,所以你不必自己动手。实际上有5个问题被问到,我的答案是一根钓竿而不是一条鱼。关于Laravel,它不能公开任何端口,因为它只是一个框架。如果你指的是拉多克,那么我在回答的最后提到了,干杯!对不起,我是说拉多克,不是拉雷维尔。对于Laradock,它有一个.env属性,MYSQL_PORT=3306,端口的docker-compose.yml属性:${MYSQL_PORT}:3306,因此,您所说的已经得到了处理。您应该编辑此答案并添加以下事实:第一步是编辑项目的.env文件并添加DB_HOST=mysqlAny想法或方法如何从另一个容器执行mysqldump?例如,当有一个包自动执行备份,但它假定mysqldump位于同一主机中时@Pathros如果您按照此答案中的说明进行操作,您将 应该在工作区中获取mysqldump。