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

Docker环境下执行Laravel artisan migrate时报连接拒绝错误

解决Laravel Docker环境下php artisan migrate连接拒绝问题

你的问题主要出在容器端口配置错误和容器间通信逻辑误解上,我帮你一步步梳理解决:

1. 修正MySQL容器的端口映射错误

你的docker-compose.yml里MySQL服务的端口配置完全不符合数据库规范:MariaDB默认运行在3306端口,而你写的是8889:80。修改这部分配置:

mysql:
  image: mariadb:latest
  ports:
    - 8889:3306  # 将80替换为MariaDB默认端口3306
  environment:
    MYSQL_ROOT_PASSWORD: 'dev'
    MYSQL_DATABASE: 'dev'
    MYSQL_USER: 'dev'
    MYSQL_PASSWORD: 'dev'

2. 调整.env文件的数据库端口配置

容器之间的通信使用容器内部的端口,而非宿主机映射的端口。所以你的.env里DB_PORT应该指向MySQL容器内部的3306,而不是宿主机的8889:

DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306  # 改成容器内部的数据库端口
DB_DATABASE=dev
DB_USERNAME=dev
DB_PASSWORD=dev

3. 重启容器使配置生效

执行命令重启所有容器,让新配置生效:

docker-compose down && docker-compose up -d

4. 在Laravel容器内部执行迁移命令

不要直接在宿主机执行php artisan migrate——宿主机的PHP环境大概率没配置正确的数据库连接,必须进入Laravel应用所在的容器内执行命令:

docker exec -it laravel_app php artisan migrate

额外排查步骤(如果问题仍存在)

  • 检查MySQL容器是否正常启动:docker-compose ps,确保mysql服务状态为Up
  • 查看MySQL容器启动日志,排查启动错误:docker-compose logs mysql
  • 进入Laravel容器测试数据库连通性:docker exec -it laravel_app php artisan tinker,执行DB::connection()->getPdo()验证连接是否成功

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:36:50