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

Docker环境下Laravel执行php artisan migrate报错求助

Docker环境下Laravel执行php artisan migrate报错的排查与解决

1. 确认Docker Compose网络与服务名配置

Docker Compose默认会为所有服务创建专属网络,服务间通过服务名互相访问,所以DB_HOST必须对应docker-compose.yml中数据库服务的名称(比如你提到的lar-db)。

  • 检查你的docker-compose.yml数据库服务配置,确保类似如下结构:
    services:
      lar-db:
        image: mysql:8.0
        environment:
          MYSQL_ROOT_PASSWORD: your_root_password
          MYSQL_DATABASE: rating
          MYSQL_USER: your_db_user
          MYSQL_PASSWORD: your_db_password
        ports:
          - "3306:3306"
    
  • 确保Laravel服务与数据库服务处于同一网络(默认Compose自动创建,无需额外配置;若手动指定网络,需保证两个服务都加入该网络)。

2. 严格匹配.env与MySQL容器的环境变量

.env中的数据库配置必须和MySQL容器初始化时的环境变量完全一致,重点注意:

DB_CONNECTION=mysql
DB_HOST=lar-db  # 必须用docker-compose里的数据库服务名,禁止用localhost/127.0.0.1(指向Laravel容器自身)
DB_PORT=3306
DB_DATABASE=rating
DB_USERNAME=your_db_user  # 避免直接用root,除非特意配置root允许远程访问
DB_PASSWORD=your_db_password

3. 检查MySQL用户访问权限

进入MySQL容器,验证数据库用户是否允许从Laravel容器所在网络访问:

  1. 进入容器:
    docker exec -it lar-db mysql -uroot -p
    
  2. 查看用户权限:
    SELECT user, host FROM mysql.user;
    
    若你的用户host为localhost,仅允许本地访问,需修改权限:
    ALTER USER 'your_db_user'@'%' IDENTIFIED BY 'your_db_password';
    FLUSH PRIVILEGES;
    
  3. 确认rating数据库存在:
    SHOW DATABASES;
    

4. 验证Laravel容器与数据库的连通性

进入Laravel容器,测试与数据库服务的连通性:

# 测试域名解析
docker exec -it [你的Laravel容器名] ping lar-db
# 测试端口连通
docker exec -it [你的Laravel容器名] telnet lar-db 3306
  • 若ping不通:检查Docker网络配置,确认服务名拼写正确
  • 若telnet不通:检查MySQL容器端口映射、MySQL服务是否正常启动

5. 清除Laravel配置缓存

修改.env后若未清除缓存,Laravel可能仍使用旧配置:

php artisan config:clear
php artisan cache:clear

之后重新执行php artisan migrate。

6. 查看MySQL容器日志定位错误

通过日志获取具体报错原因:

docker logs lar-db

日志会明确提示是权限错误、密码错误还是数据库不存在等问题。

内容的提问来源于stack exchange,提问作者Nik Sidelnikov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 17:30:48