mac 下运行 `php artisan migrate` 报错:SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known
如题,在使用 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 数据库服务,这样应该也是可以的。
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。