Laradock环境执行php artisan migrate报SQLSTATE[HY000] [2002]错误求助
解决Laradock环境下Laravel执行
php artisan migrate的数据库连接错误 核心问题原因
Laradock是Docker容器化环境,Laravel应用和MySQL各自运行在独立容器里。你之前用localhost或127.0.0.1作为数据库主机,指向的是Laravel容器自身,而非MySQL容器:
- 用
localhost时,PHP会尝试通过Unix socket连接,但Laravel容器里没有MySQL的socket文件,触发SQLSTATE[HY000] [2002] No such file or directory - 用
127.0.0.1时,Laravel容器尝试连接自身的3306端口,但该端口没运行MySQL服务,触发连接拒绝
具体解决步骤
1. 修改.env文件的数据库主机配置
把.env里的DB_HOST改成Laradock中MySQL容器的服务名(默认是mysql):
DB_CONNECTION=mysql DB_HOST=mysql DB_PORT=3306 DB_DATABASE=laravelApp DB_USERNAME=root DB_PASSWORD=root
2. 确认MySQL容器正常运行
进入Laradock目录,执行命令检查MySQL容器状态:
docker-compose ps mysql
如果容器没启动,手动启动:
docker-compose up -d mysql
3. 确认目标数据库已创建
进入MySQL容器内部,检查laravelApp数据库是否存在:
docker-compose exec mysql mysql -uroot -proot
进入MySQL命令行后执行:
SHOW DATABASES;
如果没有laravelApp,手动创建:
CREATE DATABASE laravelApp;
4. 清除Laravel配置缓存
修改.env后,清除缓存确保新配置生效:
php artisan config:clear php artisan cache:clear
额外排查点
- 检查Laradock的
docker-compose.yml中MySQL服务的端口映射是否为3306:3306 - 确认.env里的
DB_PASSWORD和Laradock MySQL容器的ROOT密码一致(默认是root,可在Laradock的.env文件中修改)
内容的提问来源于stack exchange,提问作者Mert Can Karakaya
相关产品推荐
相关产品推荐

