You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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端口通信,且主机地址配置错误。

分步解决方案

  1. 修正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。

  2. 重启容器使配置生效
    在项目根目录执行命令重启所有相关服务:

    docker-compose down
    docker-compose up -d
    
  3. 验证网络连通性(可选)
    进入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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 07:22:15