docker 执行TP 的 migrate数据库迁移报错2002

在操作docker的时候总会有一些错误,这不现在错误来了

在我执行

 php think migrate:run

的时候出现了以下错误

[InvalidArgumentException]
There was a problem connecting to the database: SQLSTATE[HY000] [2002] Connection refused

image-20220414190150444

我这儿一看,这不是数据连接错误,难道是我数据库的用户名,密码,端口写错了?

于是我仔细检查了数据库配置文件,发现没有任何问题,经过一番查阅,猜测很有可能是链接地址写错了,因为我写的事127.0.0.1,于是我将它改成了localhost

重新执行发现,耶~~,错误变了

[InvalidArgumentException]
There was a problem connecting to the database: SQLSTATE[HY000] [2002] No such file or directory

但是错误状态码是一样的

image-20220414191807147

继续找

经过一番查询,应该是找不到mysql sokcet的路径导致,那么首先得找到mysql的配置文件中查找,进入容器之后我找是找到了,但是又想到了一个问题,使用的是docker,两个容器虽然在同一个网络,但是他们是独立的个体,改了配置就能解决问题吗?

到这里我就感觉思路错了!

于是又是一番查找,终于看到一篇博客证实了我的猜测

https://www.cnblogs.com/maowenqiang/p/16010447.html

原文是这么说的

使用docker生成mysql容器,

在连接时,

如果你把host写成 localhost $host='localhost';

会报错: SQLSTATE[HY000] [2002] No such file or directory

如果把 host 写成 IP 地址,

$host='127.0.0.1';

会报错 SQLSTATE[HY000] [2002] Connection refused

解决:

应该写成mysql容器的名称,

例如 $host='lnmp_mysql';

这里有个前提, 需要你的mysql容器和php容器在同一个docker网络,

或者使用 --link lnmp_mysql指定。

疑惑解开,动手试试

注意先将数据库容器名给制定了

参考:https://www.cnblogs.com/makalochen/p/14266075.html#container_name

之后把之前的容器全部删掉

docker rm -f $(docker ps -qa)

重新启动

docker-compose up -d

查看容器名称

docker ps

重新进入php-fpm容器

docker exec -it a7176ab992b5 /bin/bash

进入代码跟目录执行数据迁移

 php think migrate:run

image-20220414201056027

运行成功,欧耶

posted @ 2022-04-14 20:13  makalo  阅读(451)  评论(0编辑  收藏  举报