Docker部署Laravel应用遇SQLSTATE[HY000][1045]权限拒绝错误求助
Laravel容器化MySQL权限拒绝问题解决
尝试将Laravel应用容器化时,遇到MySQL权限拒绝错误:SQLSTATE[HY000] [1045] Access denied for user 'user'@'172.18.0.3',同时用phpMyAdmin以用户名user、密码password登录时也提示权限拒绝。相关配置如下:
docker-compose.yml
version: "3.8" services: # Database Server database: image: mysql:8.4.0 ports: - 3306:3306 environment: - MYSQL_DATABASE="${DB_DATABASE}" - MYSQL_USER="${DB_USERNAME}" - MYSQL_PASSWORD=password volumes: - db-data:/var/lib/mysql # PHP Service php: build: context: . target: php args: - APP_ENV="${APP_ENV}" environment: - APP_ENV="${APP_ENV}" - CONTAINER_ROLE=app working_dir: /var/www volumes: - ./:/var/www ports: - 8000:8000 depends_on: - database phpmyadmin: image: phpmyadmin restart: always ports: - 8080:80 environment: - PMA_ARBITRARY=1 volumes: db-data: ~
.env
DB_CONNECTION=mysql DB_HOST=database DB_PORT=3306 DB_DATABASE=my_database DB_USERNAME=user DB_PASSWORD=password
解决方案
1. 完善MySQL环境配置
MySQL 8.x镜像初始化时必须设置MYSQL_ROOT_PASSWORD,否则会导致用户权限初始化异常。同时建议将MYSQL_PASSWORD改为引用.env变量,避免硬编码不一致:
修改docker-compose.yml中database服务的environment部分:
environment: - MYSQL_ROOT_PASSWORD=rootpassword # 添加root用户密码 - MYSQL_DATABASE="${DB_DATABASE}" - MYSQL_USER="${DB_USERNAME}" - MYSQL_PASSWORD="${DB_PASSWORD}" # 引用.env中的密码变量
2. 清理旧数据库卷
已创建的db-data卷可能残留了未正确配置的用户数据,需删除后重新初始化:
# 停止并移除现有容器 docker-compose down # 删除数据库数据卷(替换<项目目录名>为你的实际项目文件夹名称) docker volume rm <项目目录名>_db-data # 重新启动并初始化容器 docker-compose up -d
3. 验证登录与连接
- phpMyAdmin登录:访问
http://localhost:8080,主机填写database,用户名输入user,密码输入password即可登录;也可使用root用户(用户名root,密码rootpassword)验证。 - Laravel连接测试:进入PHP容器执行迁移命令验证数据库连接:
docker-compose exec php php artisan migrate
内容的提问来源于stack exchange,提问作者etranz
相关产品推荐
相关产品推荐

