推荐使用 composer require laravel/sail --dev,因sail仅为开发工具,需明确置于require-dev区块以避免误入生产环境,并须在已初始化的laravel项目中执行,后续还需手动检查app_url、端口映射及数据库环境变量一致性。

为什么 composer require laravel/sail --dev 是唯一推荐方式
直接运行 composer create-project laravel/laravel 不会自动包含 Sail,Sail 不是 Laravel 框架的运行时依赖,而是本地开发辅助工具,必须显式声明为开发依赖。用 --dev 参数才能确保它只出现在 require-dev 区块,避免误入生产环境。
常见错误是漏掉 --dev,导致 laravel/sail 被写进 require,后续部署时 Composer 可能尝试安装 Docker 相关 PHP 扩展(实际不存在),或触发不必要的 autoload 逻辑。
- 必须在已初始化的 Laravel 项目根目录下执行,不能在空文件夹里跑
- 执行后会自动生成
docker-compose.yml和vendor/bin/sail可执行脚本 - 如果项目已存在
docker-compose.yml,require命令不会覆盖它——需手动比对差异
执行 php artisan sail:install 后必须检查的三处配置
sail:install 只负责生成基础容器定义和环境模板,不验证宿主机是否就绪。很多「sail up 报错」问题其实源于这三处没确认:
-
.env中的APP_URL必须是http://localhost或http://laravel.test,不能是127.0.0.1(Docker 内部网络解析失败) -
docker-compose.yml里的services.app.ports默认映射"8000:80",若宿主机 8000 被占用,要提前改掉,否则sail up看似成功但访问 8000 返回空白 -
services.mysql.environment.MYSQL_ROOT_PASSWORD和MYSQL_DATABASE必须与.env中的DB_PASSWORD、DB_DATABASE保持一致,否则php artisan migrate连不上
./vendor/bin/sail 权限被拒绝?不是 Bug 是预期行为
Linux/macOS 下首次运行 ./vendor/bin/sail 报 Permission denied 很常见,因为 Composer 下载的 sail 脚本默认没有可执行权限。这不是包损坏,而是安全策略:Composer 不会自动 chmod +x 任何二进制文件。
解决方法只有这一种:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
chmod +x vendor/bin/sail
注意:sail 是 shell 脚本,不是 PHP 文件,不能用 php vendor/bin/sail 绕过权限问题——那样会报语法错误。
- Windows 用户(WSL 除外)不用处理此问题,
sail在 PowerShell/CMD 下通过php自动代理执行 - Git clone 项目后,如果
vendor/是从别处复制来的,也要重新chmod,权限不随文件复制保留
Mac M系列芯片上 sail up 卡在 mysql 启动?优先检查镜像架构
默认 laravelsail/mysql 镜像是 amd64 架构,M1/M2 芯片运行会触发 Rosetta 模拟,极慢甚至卡死。不是资源不足,是架构不匹配。
解决路径很窄:必须指定 arm64 兼容镜像。修改 docker-compose.yml 中 mysql 服务的 image 行:
image: 'mysql:8.0-arm64v8'
或者更稳妥地换用官方多架构支持的标签:
image: 'mysql:8.0'
(Docker Desktop for Mac 4.19+ 会自动拉取 arm64 层)
- 不要用
laravelsail/mysql的 latest 标签,它长期未更新,无 arm64 支持 - 执行
sail down && sail up -d前,先docker system prune -a清掉旧镜像,避免缓存干扰 - PHP 容器同理,
laravelsail/php82没有 arm64 版本,应改用php:8.2-cli
composer require 和 artisan sail:install 搞不定真实开发环境。










