docker 执行TP 的 migrate数据库迁移报错2002
在操作docker的时候总会有一些错误,这不现在错误来了
在我执行
php think migrate:run
的时候出现了以下错误
[InvalidArgumentException]
There was a problem connecting to the database: SQLSTATE[HY000] [2002] Connection refused
我这儿一看,这不是数据连接错误,难道是我数据库的用户名,密码,端口写错了?
于是我仔细检查了数据库配置文件,发现没有任何问题,经过一番查阅,猜测很有可能是链接地址写错了,因为我写的事127.0.0.1
,于是我将它改成了localhost
重新执行发现,耶~~,错误变了
[InvalidArgumentException]
There was a problem connecting to the database: SQLSTATE[HY000] [2002] No such file or directory
但是错误状态码是一样的
继续找
经过一番查询,应该是找不到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
运行成功,欧耶