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

Laravel Sail无法连接MySQL数据库及GUI连接配置问题

核心问题

你的MySQL容器端口映射配置错误,这是连不上库的根本原因。
看你docker-compose.yml中mysql服务的端口配置:

ports:
    - '${FORWARD_DB_PORT:-3307}:3307'

mysql/mysql-server:8.0镜像默认在容器内部监听3306端口,你当前配置是把宿主机3307端口绑定到容器的3307端口,但容器内根本没有服务在3307端口运行,所以不管是应用内部还是外部GUI工具,走TCP连这个端口都会失败。你之前docker ps输出里的0.0.0.0:3307->3307/tcp就是这个错误映射的结果,看似端口开放,实际背后没有对应服务响应。

修复步骤
  • 修改docker-compose.yml里mysql服务的端口映射,将容器侧端口改为3306:
ports:
    - '${FORWARD_DB_PORT:-3307}:3306'
  • 在项目根目录执行命令重启Sail容器,让配置生效:
./vendor/bin/sail down -v
./vendor/bin/sail up -d

注意:-v参数会清空当前数据库持久化卷的旧数据,如果是已经上线存了生产数据的环境先做备份,本地新开发环境直接执行即可。

  • 按照使用场景配置对应连接参数:
    • Laravel应用内部连接(跑在laravel.test容器里的业务代码):修改.env配置,DB_HOST=mysql,DB_PORT=3306,其余DB_USERNAME=sail、DB_PASSWORD=password、DB_DATABASE=myDb保持不变即可。容器内部通过docker网桥通信,mysql是compose自动分配的服务域名,直接走内部3306端口。
    • 宿主机GUI工具连接(Navicat、DBeaver、TablePlus等):连接地址填127.0.0.1,端口填3307,用户名sail,密码password,指定数据库为myDb即可正常连接。
之前排查无效的原因说明
  • 切换DB_HOST为127.0.0.1/localhost无效:Laravel代码运行在独立的PHP容器中,这两个地址指向的是PHP容器自身,不是MySQL容器,也不是你的宿主机,自然连不上数据库服务。
  • 把DB_HOST改成mysql还是无效:因为你.env里DB_PORT填的是3307,而MySQL容器内部只监听3306,端口不匹配自然连接失败。
  • 容器状态显示healthy、用sail mysql命令能进CLI不代表配置正确:这两个操作都是在容器内部执行,健康检查走容器内部网络,sail自带的mysql客户端直接通过本地socket连库,都不经过你配置错误的端口映射规则,所以不受影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 16:03:32