You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Laravel Sail:Docker容器内运行MySQL PHP迁移报错的解决咨询

解决Laravel Sail迁移时"Unknown database 'laravel'"错误

哎,这个问题我之前帮朋友排查过,核心就是你的MySQL容器里压根没创建名为laravel的数据库——虽然你在.envdocker-compose.yml里都配置了,但大概率是容器的持久化卷缓存或者启动顺序的问题,导致数据库没被正确初始化。下面一步步来搞定:

1. 先把配置调对

先核对下你的.envdocker-compose.yml的数据库配置,确保完全匹配且合理:

  • .env里的关键配置要改成这样:
    DB_CONNECTION=mysql
    DB_HOST=mysql  # 直接用服务名就行,别写容器IP,Docker内部能通过服务名访问,IP重启会变
    DB_PORT=3306
    DB_DATABASE=laravel
    DB_USERNAME=root
    DB_PASSWORD=
    
  • 再确认docker-compose.yml里的MySQL服务是引用.env变量来自动创建数据库的:
    mysql:
        image: 'mysql:8.0'
        ports:
            - '${FORWARD_DB_PORT:-3306}:3306'
        environment:
            MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
            MYSQL_DATABASE: '${DB_DATABASE}'  # 这里会自动创建.env里指定的数据库
            MYSQL_USER: '${DB_USERNAME}'
            MYSQL_PASSWORD: '${DB_PASSWORD}'
            MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
        volumes:
            - 'sailmysql:/var/lib/mysql'
    

2. 清理MySQL的持久化卷(最关键的一步)

Laravel Sail用sailmysql这个本地卷来保存MySQL的数据,如果之前你启动过容器但数据库没正确创建,卷里的旧数据会"记住"之前的状态,新的配置就不生效了。得把这个卷删掉重新初始化:

  • 先停掉所有Sail容器:
    ./vendor/bin/sail down
    
  • 删除MySQL的持久化卷:
    docker volume rm sailmysql
    
  • 重新启动容器(这次会根据.env里的配置,自动创建laravel数据库):
    ./vendor/bin/sail up -d
    

3. 验证数据库是否真的创建成功

容器启动后,进去MySQL容器里确认下:

./vendor/bin/sail exec mysql mysql -u root

进入MySQL命令行后,输入这条命令查看数据库列表:

SHOW DATABASES;

如果能看到laravel出现在列表里,那没问题了,直接跑迁移:

./vendor/bin/sail artisan migrate

4. 万一还是不行?

如果还是报错,看看MySQL容器的启动日志,有没有初始化时的错误提示:

./vendor/bin/sail logs mysql

日志里会告诉你具体哪里出问题,比如密码不符合要求(不过你这里是空密码,应该没问题),或者权限类的问题。

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

火山引擎 最新活动