执行php artisan migrate遇homestead用户MySQL权限拒绝问题求助
执行
php artisan migrate时出现MySQL权限拒绝错误 执行php artisan migrate命令时,报错:access denied for user'homestead'@'172.21.0.1'。
已尝试以下操作,问题仍未解决:
composer dump-autoload -ophp artisan cache:clearphp artisan config:clearphp artisan route:clear
Docker中的mysql-1容器运行正常,已调整过.env文件的数据库配置,包括移除引号、使用默认配置:
DB_DATABASE=forge DB_USERNAME=homestead DB_PASSWORD=secret
以下是docker-compose.yml配置:
# For more information: https://laravel.com/docs/sail version: '3' services: laravel.test: build: context: ./docker/8.0 dockerfile: Dockerfile args: WWWGROUP: '${WWWGROUP}' image: sail-8.0/app extra_hosts: - 'host.docker.internal:host-gateway' ports: - '${APP_PORT:-80}:80' - '8000:80' environment: WWWUSER: '${WWWUSER}' LARAVEL_SAIL: 1 XDEBUG_MODE: '${SAIL_XDEBUG_MODE:-off}' XDEBUG_CONFIG: '${SAIL_XDEBUG_CONFIG:-client_host=host.docker.internal}' volumes: - '.:/var/www/html' networks: - sail depends_on: - mysql - redis - minio mysql: image: 'mysql/mysql-server:5.7.16' ports: - '${FORWARD_DB_PORT:-3306}:3306' environment: MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}' MYSQL_ROOT_HOST: "%" MYSQL_DATABASE: '${DB_DATABASE}' MYSQL_USER: '${DB_USERNAME}' MYSQL_PASSWORD: '${DB_PASSWORD}' MYSQL_ALLOW_EMPTY_PASSWORD: 1 volumes: - 'sail-mysql:/var/lib/mysql' networks: - sail healthcheck: test: ["CMD", "mysqladmin", "ping", "-p${DB_PASSWORD}"] retries: 3 timeout: 5s redis: image: 'redis:alpine' ports: - '${FORWARD_REDIS_PORT:-6379}:6379' volumes: - 'sail-redis:/data' networks: - sail healthcheck: test: ["CMD", "redis-cli", "ping"] retries: 3 timeout: 5s minio: image: 'minio/minio:latest' ports: - '${FORWARD_MINIO_PORT:-9000}:9000' - '${FORWARD_MINIO_CONSOLE_PORT:-8900}:8900' environment: MINIO_ROOT_USER: 'sail' MINIO_ROOT_PASSWORD: 'password' volumes: - 'sail-minio:/data/minio' networks: - sail command: minio server /data/minio --console-address ":8900" healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] retries: 3 timeout: 5s mailhog: image: 'mailhog/mailhog:latest' ports: - '${FORWARD_MAILHOG_PORT:-1025}:1025' - '${FORWARD_MAILHOG_DASHBOARD_PORT:-8025}:8025' networks: - sail networks: sail: driver: bridge volumes: sail-mysql: driver: local sail-redis: driver: local sail-minio: driver: local
解决步骤
1. 修正数据库连接地址
在.env文件中添加或修改DB_HOST为容器服务名mysql——Docker容器间通过服务名通信,而非宿主机IP:
DB_HOST=mysql
2. 重置MySQL数据卷
旧数据卷可能留存了错误的用户权限配置,需要清除重建:
- 停止并移除容器及数据卷:
docker-compose down -v - 重新启动容器:
docker-compose up -d
3. 验证并修复用户权限
进入MySQL容器检查用户权限:
- 进入容器:
docker-compose exec mysql bash - 登录MySQL:
mysql -u root -p${DB_PASSWORD} - 查询用户主机权限:
SELECT host, user FROM mysql.user WHERE user = 'homestead';
如果host不是%,执行以下命令更新权限:
GRANT ALL PRIVILEGES ON forge.* TO 'homestead'@'%'; FLUSH PRIVILEGES;
4. 重新执行迁移
再次清除配置缓存并执行迁移:
php artisan config:clear php artisan migrate
内容的提问来源于stack exchange,提问作者ramsamsam
相关产品推荐
相关产品推荐

