Laradock不能与mysql一起使用

时间:2017-10-15 04:50:13

标签: laravel docker docker-compose laradock

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

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

启动容器
docker-compose up -d nginx mysql

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

project
    +laradock-spa

php端似乎有效,我可以获得laravel欢迎页面,但是连接数据库会导致我出现问题。

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

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

但是,我无法在数据库中获得初始POST以在Postman中工作 - 我收到错误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密码登录数据库,运行第一次迁移后,我可以看到里面的表。

docker ps显示所有容器。

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

不过,我在PC上运行了本地mysql,也许这会引起一些冲突/混淆?

我在Win10上运行所有这些。

2 个答案:

答案 0 :(得分:7)

当您使用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相同,依此类推。

希望现在更清楚了一点:)

enter image description here

答案 1 :(得分:2)

我只是added the MySQL client to the workspace container,因此您应该可以通过设置

在其中运行迁移
WORKSPACE_INSTALL_MYSQL_CLIENT=true

在您的.env文件中并正在运行

 docker-compose build workspace

然后您可以使用

docker-compose exec workspace bash

进行迁移或您心中想要的任何MySQL魔术。

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