使用VS Code远程容器时Laravel报SQLSTATE[HY000] [2002]连接拒绝错误
解决Laravel远程容器中MySQL连接被拒绝的问题
问题核心原因
在Docker Compose的虚拟网络环境中,每个服务对应独立容器,127.0.0.1指向Laravel应用容器自身,而非MySQL容器。Docker会自动为Compose配置中的服务创建DNS解析,需使用MySQL服务的名称mysql作为数据库主机地址。
具体修复步骤
1. 修改.env文件的数据库主机配置
将DB_HOST的值从127.0.0.1改为mysql,其他配置保持不变:
DB_CONNECTION=mysql DB_HOST=mysql DB_PORT=3306 DB_DATABASE=laragigs DB_USERNAME=root DB_PASSWORD=11111
2. 修正docker-compose.yml的MySQL配置
原配置中MYSQL_ROOT_HOST: "${DB_HOST}"会限制root用户仅能从127.0.0.1访问,导致Laravel容器无法连接。移除该配置(或设置为%允许所有主机访问):
mysql: image: 'mysql/mysql-server:8.0' ports: - '${FORWARD_DB_PORT:-3306}:3306' environment: MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}' MYSQL_DATABASE: '${DB_DATABASE}' MYSQL_USER: '${DB_USERNAME}' MYSQL_PASSWORD: '${DB_PASSWORD}' MYSQL_ALLOW_EMPTY_PASSWORD: 1
3. 重启容器使配置生效
在项目根目录执行以下命令:
docker-compose down docker-compose up -d
同事部署指南
- 克隆项目到本地
- 复制项目中的
.env文件(或从.env.example复制后修改为上述正确配置) - 运行
docker-compose up -d启动所有服务容器 - 进入Laravel应用容器(或使用
docker-compose exec app bash),执行php artisan migrate完成数据库初始化
内容的提问来源于stack exchange,提问作者Jaki
相关产品推荐
相关产品推荐

