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

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访问:

  1. 进入数据库容器:
sudo docker exec -it database mysql -uroot -p${DB_PASSWORD}
  1. 在MySQL命令行执行授权:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '${DB_PASSWORD}' WITH GRANT OPTION;
FLUSH PRIVILEGES;
  1. 退出容器后重新执行php artisan migrate

方案3:清除旧数据库卷(彻底重置)

如果之前的数据库卷残留了旧的权限配置,导致新配置不生效:

  1. 停止并删除容器:
sudo docker compose down
  1. 删除持久化数据卷(注意:这会清空所有数据库数据):
sudo docker volume rm $(docker volume ls | grep db-data | awk '{print $2}')
  1. 重新构建并启动容器:
sudo docker compose build --no-cache && sudo docker compose up --force-recreate -d
  1. 再次执行迁移命令

内容的提问来源于stack exchange,提问作者Armin Eyvazi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 06:19:56