Laradock不能使用mysql
我不明白如何让Laradock正确使用MySQL数据库。
我遵循laradock文档并安装了所有东西,使用容器
docker-compose up -d nginx mysql
我有这样的多个项目版本布局
project +laradock-spa
PHP方面似乎工作,我可以得到laravel欢迎页面,但是获取数据库连接正在导致我的问题。
首先,我应该在哪里运行php artisan migrate
这样的php artisan migrate
命令? 应该从我的机器在项目文件夹中运行,还是从Docker容器中运行?
当我从我的项目文件夹运行它,它的工作原理,我可以进入MySQL容器,看到初始数据库表,如migration
和user
。
但是,我不能得到一个初步的邮政信箱数据库工作邮递员 – 我得到错误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
等等。
希望这个更清晰:)