Laravel+Docker环境下MySQL连接报错SQLSTATE[HY000][2002]求助
解决Laravel+Docker环境下SQLSTATE[HY000] [2002]数据库连接错误
核心问题原因
在Docker环境中,每个容器拥有独立的网络命名空间,Laravel容器内的localhost指向容器自身而非宿主机或MySQL容器。你遇到的No such file or directory错误,本质是Laravel尝试通过本地socket连接MySQL,但Docker部署下的MySQL通常使用TCP端口通信,且主机地址配置错误。
分步解决方案
修正Laravel数据库配置
打开项目根目录的.env文件,修改数据库主机配置:DB_HOST=mysql # 此处改为你docker-compose.yml中MySQL服务的名称,默认常为mysql DB_PORT=3306 DB_DATABASE=你的数据库名 DB_USERNAME=数据库用户名 DB_PASSWORD=数据库密码注意:
DB_HOST必须和Docker Compose配置中MySQL服务的service名称完全一致,比如你的compose文件里写的是services: db: ...,那就要改成DB_HOST=db。重启容器使配置生效
在项目根目录执行命令重启所有相关服务:docker-compose down docker-compose up -d验证网络连通性(可选)
进入Laravel容器,测试与MySQL服务的连通性:docker exec -it 你的laravel容器名称 bash ping mysql # 如果能正常收到响应,说明网络互通正常
其他排查方向
- 检查MySQL容器状态:执行
docker ps确认MySQL容器处于Up状态,若异常查看日志:docker logs 你的mysql容器名称 - 清除Laravel配置缓存:如果之前执行过
php artisan config:cache,需要进入容器执行php artisan config:clear清除缓存 - 确认容器网络:若未使用Docker Compose,需手动将Laravel容器和MySQL容器加入同一Docker网络:
docker network create laravel-network,启动容器时添加--network laravel-network参数
内容的提问来源于stack exchange,提问作者Amarsanaa Enkhbat
相关产品推荐
相关产品推荐

