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
相关产品推荐
相关产品推荐

