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

Docker部署Laravel出现SQLSTATE[HY000] [2002]数据库连接错误如何解决?

问题根因

这个报错的核心原因是Docker容器间通信的端口配置错误:
官方MySQL 5.7镜像默认在容器内部监听3306端口,你在docker-compose.yml中配置的33069:3306是宿主机到容器的端口映射,仅用于外部工具(如Navicat、本地MySQL客户端)访问数据库,同一Docker网络内的服务之间通信只能用容器内部端口。
你在.env中配置的DB_PORT=33069会让Laravel尝试访问db服务的33069端口,而db容器根本没有在该端口监听,因此触发连接失败报错。
前期运行正常大概率是因为你初始配置的端口正确,后续修改.env或清理配置缓存后,错误的端口配置生效。

修复步骤
  1. 修正端口配置
    将.env中的DB_PORT改为3306:
DB_PORT=3306

同时在docker-compose.yml的users服务的environment配置中补充DB_PORT,避免.env配置被覆盖不生效:

users:
  build:
    context: .
    dockerfile: Dockerfile
  environment:
    DB_HOST: db
    DB_PORT: 3306
    DB_DATABASE: users
    DB_USERNAME: root
    DB_PASSWORD: root
  # 其余原有配置保持不变
  1. 重建服务生效
    执行以下命令重启所有服务:
docker-compose down
docker-compose up -d --build
  1. 验证修复效果
    进入Laravel容器执行迁移测试:
docker-compose exec users php artisan migrate
边缘问题排查

如果修改后仍有报错,可按以下顺序排查:

  • 执行docker-compose logs db查看MySQL容器运行日志,若存在启动失败报错,可先备份数据后删除本地./storage/dbdata目录,再重启服务重建数据库
  • 确认users服务的depends_on配置仅保证启动顺序,不保证MySQL完全初始化完成再启动Laravel,可在command中增加等待逻辑,比如改成sh -c "sleep 10 && php artisan serve --host 0.0.0.0"

内容的提问来源于stack exchange,提问作者Nikita

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 19:45:01