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

Laravel 8 Sail项目如何在docker-compose.yml中将MySQL从8.0切换为5.6/5.7

问题根本原因

你之前运行MySQL 8.0时已经生成了名为sailmysql的持久化存储卷,卷内的数据库文件是MySQL 8.0的存储格式,与MySQL 5.7不兼容,这是导致容器启动失败返回Exit 2的核心原因。

解决方案步骤

  • 第一步:删除旧的MySQL持久化卷
    先停止正在运行的容器,执行命令:
    sail down -v
    
    加-v参数会同时删除关联的sailmysql存储卷,注意:该操作会清空你之前在MySQL 8.0容器中存储的所有数据库数据,若有需要请提前备份。
  • 第二步:调整MySQL配置适配5.7版本
    你当前的配置里MYSQL_ALLOW_EMPTY_PASSWORD参数在部分MySQL 5.7镜像版本中可能会触发校验问题,建议修改为如下配置:
    mysql:
        image: 'mysql:5.7'
        ports:
            - '${FORWARD_DB_PORT:-3306}:3306'
        environment:
            MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
            MYSQL_DATABASE: '${DB_DATABASE}'
            MYSQL_USER: '${DB_USERNAME}'
            MYSQL_PASSWORD: '${DB_PASSWORD}'
        volumes:
            - 'sailmysql:/var/lib/mysql'
        networks:
            - sail
        healthcheck:
          test: ["CMD", "mysqladmin", "ping", "-p${DB_PASSWORD}"]
          retries: 3
          timeout: 5s
    
  • 第三步:重新启动容器
    执行命令重建容器和存储卷:
    sail up -d
    
    启动完成后执行docker-compose ps即可看到MySQL 5.7容器正常运行。

额外注意事项

  • 你同步修改了PHP版本为7.3,需要确认你的Laravel 8版本兼容PHP 7.3:Laravel 8最小支持PHP 7.3,只要你的项目没有安装依赖PHP 8+的第三方扩展即可正常运行。
  • 如果删除旧卷后仍然启动失败,可以执行docker logs <mysql容器名>查看具体报错日志,排查是否为.env中数据库密码不符合MySQL 5.7的密码规则导致的初始化失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 22:15:05