如题,在使用 docker 搭建了 mac 下的部署环境后,在本地运行 php artisan migrate 执行数据库迁移操作时报错:

本地使用 brew 安装了 php,因为需要一些命令行指令操作,如安装依赖、执行定时任务,以及数据库迁移等。

网上找到 解决方法,里面提到两个方面可能存在的问题:

  • 关闭防火墙
  • 查看访问的连接,是不是没有配置到 /etc/hosts

第一种要关闭本地防火墙,在设置里找到安全性与隐私,防火墙,更改为关闭。但并没有效果。

第二种说是否配置到 /etc/hosts,这是本地的 DNS 解析配置。突然意识到,因为部署在 docker 容器中,所以数据库连接访问的是 host.docker.internal,这个在本地是没有解析的。所以问题就出在这。

docker 主机域名只能在 docker 容器中识别,那么进入到 php 的容器中执行就可以了。php 容器有映射本地代码目录,所以切换到 /var/www/html/project_a 下执行 php artisan migrate,ok 了。

另外沿着本地配置这个域名的思路,可以考虑在 /etc/hosts 增加一条 127.0.0.1 host.docker.internal,这样本地执行 php 脚本也可以通过本地的 3306 端口访问到 mysql 数据库服务,这样应该也是可以的。