Docker Compose环境执行php artisan migrate遇SQLSTATE[HY000][1045]权限错误求助
解决Docker环境下Laravel迁移数据库权限问题
第一步:修正Docker Compose语法错误
你的PHP服务环境变量配置混合了两种格式(键值对和列表),会导致环境变量加载异常,先修正:
# PHP Service部分的environment字段改为: environment: DB_HOST: database DB_DATABASE: ${DB_DATABASE} DB_USERNAME: ${DB_USERNAME} DB_PASSWORD: ${DB_PASSWORD} APP_ENV: ${APP_ENV} CONTAINER_ROLE: app
第二步:根据需求选择对应解决方案
方案1:使用创建的普通用户连接(推荐)
确保你的.env文件中DB_USERNAME和DB_PASSWORD与数据库容器的MYSQL_USER、MYSQL_PASSWORD完全一致。数据库容器启动时已经自动为该用户分配了目标数据库的全部权限,直接使用这个用户执行迁移即可。
方案2:使用root用户连接(不推荐生产环境)
如果必须用root用户,需要给root用户授权允许跨IP访问:
- 进入数据库容器:
sudo docker exec -it database mysql -uroot -p${DB_PASSWORD}
- 在MySQL命令行执行授权:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '${DB_PASSWORD}' WITH GRANT OPTION; FLUSH PRIVILEGES;
- 退出容器后重新执行
php artisan migrate
方案3:清除旧数据库卷(彻底重置)
如果之前的数据库卷残留了旧的权限配置,导致新配置不生效:
- 停止并删除容器:
sudo docker compose down
- 删除持久化数据卷(注意:这会清空所有数据库数据):
sudo docker volume rm $(docker volume ls | grep db-data | awk '{print $2}')
- 重新构建并启动容器:
sudo docker compose build --no-cache && sudo docker compose up --force-recreate -d
- 再次执行迁移命令
内容的提问来源于stack exchange,提问作者Armin Eyvazi
相关产品推荐
相关产品推荐

