用 sail 命令可快速启动 Laravel 项目:执行 curl -s "https://laravel.build/example-app" | bash 初始化,再运行 ./vendor/bin/sail up -d 启动容器,访问 http://localhost 即可;后续可用 ./sail 替代完整路径执行 artisan、php 等命令。

怎么用 sail 命令快速启动 Laravel 项目(不手动装 Docker)
只要本地有 Docker Desktop(Mac/Windows)或 Docker Engine(Linux),sail 就能绕过全局 PHP/Composer 环境直接跑起来,不用装 php、mysql、redis 本机服务。
实操建议:
- 在新 Laravel 项目根目录执行
curl -s "https://laravel.build/example-app" | bash,它会自动拉取 Sail 脚本、生成docker-compose.yml和.env - 运行
./vendor/bin/sail up -d启动容器,等几秒后访问http://localhost即可看到欢迎页 - 首次运行后,
sail会把常用命令软链接到./sail,之后直接用./sail artisan migrate或./sail php --version更顺手 - 别手动改
docker-compose.yml里的镜像版本(比如mysql:8.0),Sail 内部做了适配,乱改容易导致artisan连不上数据库
为什么 sail 启动后访问 500 错误或白屏
常见现象是浏览器显示 “Whoops, looks like something went wrong”,但 ./sail logs laravel.test 没报错,或者日志里出现 Class 'App\Providers\AppServiceProvider' not found。
根本原因是:Docker 容器内 PHP 的 opcache 缓存了旧的类路径,而你本地改了代码、又没清缓存。
解决办法:
- 每次改完
app/或config/下的 PHP 文件,执行./sail artisan config:clear && ./sail artisan cache:clear - 如果用了
opcache.enable=1(Sail 默认开启),加一步./sail php -r 'opcache_reset();' - 开发阶段可以直接在
docker-compose.yml的laravel.test服务下加环境变量:OPCACHE_ENABLE: 0,避免反复清缓存
sail 和原生 docker-compose 的关键参数差异
Sail 封装了一层,不是简单 wrapper。比如 ./sail up 实际调用的是 docker-compose up,但默认加了 --remove-orphans 和特定网络配置;./sail test 会自动挂载 ./tests 并设置 APP_ENV=testing。
需要注意的点:
-
./sail down会删掉 volume 数据(包括 MySQL 数据),如需保留,改用./sail stop - 想临时加一个端口映射(比如调试 Redis),不能只改
docker-compose.yml,还得在.env里加REDIS_PORT=6380,Sail 才会读取并注入 -
./sail shell进入的是laravel.test容器,用户是sail,不是root;要装系统包(比如vim),得先./sail root-shell
怎么让 Sail 支持 HTTPS 或自定义域名(如 myapp.test)
Sail 默认只监听 http://localhost,不带 HTTPS,也不支持泛域名。硬要加,得动底层配置,但别碰 laravel-sail 包里的 docker-compose.yml 模板,否则下次 composer update 会被覆盖。
推荐做法:
- 复制
vendor/laravel/sail/runtimes/8.2/docker-compose.yml(按你 PHP 版本选)到项目根目录,重命名为docker-compose.yml,然后修改:
– 在laravel.test服务下加ports: - "443:443"
– 加一个nginx服务,用nginx:alpine镜像,挂载自签名证书和自定义server{}配置 - Host 端要配域名,得手动改
/etc/hosts(Mac/Linux)或C:WindowsSystem32driversetchosts(Win),加一行127.0.0.1 myapp.test - 别指望
sail share—— 它已被移除,Laravel 10+ 不再内置 ngrok 集成
HTTPS 和多域名在 Sail 里属于“自己担风险”的操作,官方不维护,出问题得查 Nginx 日志、证书路径、SELinux(Linux)、Docker 网络策略这些底层细节。










