Laravel应用连接MySQL Docker容器时出现1045访问拒绝错误
解决Laravel连接Docker MySQL容器的1045权限错误
问题分析
从错误日志可见,Laravel尝试用root用户连接project数据库,但你的.env配置的是user和adrian_project,说明存在配置不匹配或缓存问题;同时Docker Compose的MySQL环境变量存在冲突,且.env里的密码格式可能导致解析异常。
修复步骤
1. 清理Laravel配置缓存
Laravel会缓存配置文件,修改.env后可能仍读取旧值,执行以下命令:
php artisan config:clear php artisan config:cache
若在Docker容器内操作,需先进入php容器:
docker-compose exec php bash # 再执行上述artisan命令
2. 修正.env文件的密码格式
.env中DB_PASSWORD带双引号会导致Laravel读取到的密码包含引号,直接移除引号:
DB_CONNECTION=mysql DB_HOST=mysql_db DB_PORT=3306 DB_DATABASE=adrian_project DB_USERNAME=user DB_PASSWORD=password
3. 修复MySQL容器的环境变量冲突
Docker Compose中同时设置MYSQL_ROOT_PASSWORD和MYSQL_ALLOW_EMPTY_PASSWORD=1会导致MySQL忽略根密码配置,且可能干扰普通用户权限,删除冲突的环境变量:
#MYSQL Service mysql_db: image: mysql:5.7 platform: 'linux/x86_64' container_name: mysql_db #volumes: # - /opt/mysql_db:/var/lib/mysql#~ ports: - 3306:3306 environment: MYSQL_ROOT_PASSWORD: "root" MYSQL_USER: user MYSQL_PASSWORD: "password" MYSQL_DATABASE: adrian_project # 移除该行:MYSQL_ALLOW_EMPTY_PASSWORD: 1 networks: - laravel_environment
4. 重建MySQL容器(确保用户权限正确)
之前的环境变量冲突可能导致user用户权限配置异常,删除现有MySQL容器并重新创建:
# 停止并删除容器 docker-compose down mysql_db # 重新启动容器 docker-compose up -d mysql_db
5. 验证用户权限(可选)
进入MySQL容器,检查user用户是否允许从Laravel容器所在网络访问:
docker-compose exec mysql_db mysql -u root -proot # 执行SQL查询 SELECT user, host FROM mysql.user WHERE user = 'user';
若host为localhost或特定IP,可修改为允许所有主机访问(仅适合开发环境):
GRANT ALL PRIVILEGES ON adrian_project.* TO 'user'@'%'; FLUSH PRIVILEGES;
验证修复结果
重新执行迁移命令:
docker-compose exec php php artisan migrate
内容的提问来源于stack exchange,提问作者Adrian Gaile Singh
相关产品推荐
相关产品推荐

