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

Laravel Sail Docker环境下MySQL连接被拒绝问题求助

Laravel Sail 连接MySQL报"Connection refused"的排查与解决

以下是针对该问题的具体解决建议,按优先级排序:

1. 让Laravel容器等待MySQL服务就绪

默认的depends_on仅检查MySQL容器是否启动,不验证服务是否就绪。修改docker-compose.yml中laravel.test服务的depends_on配置,关联MySQL的健康检查:

services:
    laravel.test:
        # ...其他配置
        depends_on:
            mysql:
                condition: service_healthy

修改后重启服务,Laravel容器会等MySQL完全初始化完成后再启动,避免因服务未就绪导致的连接拒绝。

2. 强制MySQL监听所有网卡

mysql/mysql-server:8.0默认仅绑定127.0.0.1,导致容器间无法通过TCP连接。在docker-compose.yml的mysql服务中添加command参数:

services:
    mysql:
        # ...其他配置
        command: --bind-address=0.0.0.0

该配置会让MySQL监听容器的所有网卡,确保Laravel容器能通过服务名mysql访问到MySQL服务。

3. 再次验证.env.testing的数据库配置

确认.env.testing中的DB_HOST确实为Docker服务名mysql,而非127.0.0.1或localhost:

DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=sail
DB_PASSWORD=newpassword

容器内部需通过Docker DNS解析服务名,而非本地回环地址。

4. 清理旧Docker卷并重新初始化

若MySQL卷存在旧数据或配置残留,可能导致连接异常:

# 停止服务并删除卷
./vendor/bin/sail down -v
# 查看并删除目标卷(替换为你的实际卷名)
docker volume ls | grep sail-mysql
docker volume rm your-project_sail-mysql
# 重新启动服务
./vendor/bin/sail up -d

5. 排查WSL2端口冲突(可选)

若Windows本地运行了MySQL服务,可能占用3306端口导致转发异常。可临时关闭本地MySQL,或修改.env中的端口转发配置:

FORWARD_DB_PORT=33060

此配置仅影响宿主机访问,容器内部仍使用3306端口连接MySQL。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 11:43:21