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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 11:05:13