Laradock不能使用mysql

我不明白如何让Laradock正确使用MySQL数据库。

我遵循laradock文档并安装了所有东西,使用容器

docker-compose up -d nginx mysql 

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

 project +laradock-spa 

PHP方面似乎工作,我可以得到laravel欢迎页面,但是获取数据库连接正在导致我的问题。

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

当我从我的项目文件夹运行它,它的工作原理,我可以进入MySQL容器,看到初始数据库表,如migrationuser

但是,我不能得到一个初步的邮政信箱数据库工作邮递员 – 我得到错误SQLSTATE[HY000] [2002] No such file or directory (SQL: insert into users (...

所以我想也许我应该从工作区容器中运行migrate命令,所以我进入工作区,但从这里php artisan migrate命令错误与[Illuminate\Database\QueryException] SQLSTATE[HY000] [2002] No such file or directory (SQL: select * from information_schem a.tables where table_schema = spa and table_name = migrations)

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

docker ps显示所有容器。

有人可以解释它是如何工作的,以及如何解决这个问题? 我不知道我应该在哪里运行哪些命令,以及容器如何相互交stream。 但基本上,我怎样才能让MySQL数据库在laravel项目中工作?

顺便说一句,我也有本地的MySQL运行在PC上,也许这是造成一些冲突/混乱?

我在Win10上运行所有这些。

当你使用Laradock时,你需要考虑容器,就好像它们是一个共享networking中的独立服务器/计算机一样。 在下面的图片中的每个矩形代表一个服务器,它有自己的IP地址,自己的Linux系统等。因此,要从另一个容器连接到MySQL,您需要知道它的IP地址或主机名。

幸运的是,Laradock提供了一些魔术来缓解这个问题,你可以使用mysql主机名,而不是在configuration文件中提供IP地址。 如果你想启用redis,你所要做的就是用docker docker-compose up redis启动redis,并在laravel config中提供redis主机名。

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

请注意,不能在docker-compose.yml暴露容器端口,而无法从主机PC连接到容器。 容器IP对于主机来说是不可见的,因为它们属于虚拟networking,而不是您计算机连接的真实networking。 默认端口已经在docker-compose.yml公开,所以你可以在IP 127.0.0.1和端口3306访问数据库,在端口80上使用docker-compose.yml等等。

希望这个更清晰:)

在这里输入图像说明