跳转到主要内容

什么是 Sail

Laravel Sail 是一款轻量的命令行工具,用于操作 Laravel 的 Docker 开发环境。 即便你不了解 Docker,也能搭建包含 PHP、MySQL、Redis 的 Laravel 应用。 Sail 的核心是位于项目根目录的 compose.yaml 文件和 sail 脚本。 sail 脚本提供了便捷的 CLI,用来操作 compose.yaml 中定义的 Docker 容器。 Laravel Sail 可运行在 macOS、Linux 以及 Windows(通过 WSL2)。
在 Laravel 13 中,Sail 不再是默认的开发环境。 项目脚手架 composer.json 已移除了 laravel/sail,取而代之的是 composer setup 命令。 默认方案是在本地使用 PHP + SQLite。
如果需要 Docker 容器,仍然可以继续安装并使用 Sail。
Sail 是仅供本地开发使用的工具,不适用于生产环境。 生产环境请另行准备合适的 Docker / 云平台方案。

安装

在已有项目中安装

使用 Composer 安装该包。
1

添加 Sail 包

2

发布配置文件

执行 sail:install Artisan 命令。 该命令会向项目根目录发布 compose.yaml,并在 .env 中添加必要的环境变量。
你可以在交互式提示中选择要使用的服务,例如 MySQL、Redis、Mailpit 等。
3

启动 Sail

首次启动时会下载 Docker 镜像,需要一些时间。 启动完成后可通过 http://localhost 访问应用。
如果使用的是 Docker Desktop for Linux,请执行 docker context use default 切换到 default 上下文。 若容器内出现文件权限错误,请将 SUPERVISOR_PHP_USER 环境变量设置为 root

添加额外服务

要向已有的 Sail 安装添加服务,使用 sail:add 命令。

使用 Devcontainer

若希望在 Devcontainer 中开发,请使用 --devcontainer 选项。

配置

设置 Shell 别名

默认情况下你需要每次输入 ./vendor/bin/sail。 设置 shell 别名后就只需输入 sail 即可。
将其加入 ~/.zshrc~/.bashrc,然后重启 shell。
设置好别名后,本文中所有以 ./vendor/bin/sail 开头的命令都可以直接以 sail 代替。

重新构建镜像

若要让镜像内的包保持最新,可重新构建。

启动与停止

要启动 compose.yaml 中定义的所有 Docker 容器,使用 up 命令。
停止时使用 stop 命令;若为前台启动,则可按 Ctrl + C

启动流程


运行命令

使用 Sail 时,应用运行在 Docker 容器内。 PHP、Artisan、Composer、Node / NPM 等命令都需要通过 sail 执行。
Laravel 官方文档中常见的 php artisancomposernpm 命令, 在 Sail 环境下需要在前面加上 sail

PHP 命令

Composer 命令

Artisan 命令

Node / NPM 命令

容器 CLI(Shell)

也可以直接进入容器打开 Bash 会话。
打开 Tinker 会话使用如下命令。

服务

以下是 Sail 提供的服务概览。可在安装时通过 sail:install 进行选择。

MySQL

默认包含在 compose.yaml 中。 数据通过 Docker Volume 持久化。首次启动时会自动创建两个数据库:一个供应用使用,另一个是 testing .env 中将 DB_HOST 设置为 mysql 即可让应用访问它。
如需从本地机器连接,可使用 TablePlus 等 GUI 工具。默认端口为 3306

Redis

.env 中将 REDIS_HOST 设置为 redis 即可访问 Redis。

Valkey

若使用 Valkey 作为 Redis 的替代,将 REDIS_HOST 设置为 valkey 即可。

Mailpit

用于捕获本地开发过程中的邮件发送,并在 Web UI 中预览。
Sail 运行时,可以通过 http://localhost:8025 访问 Mailpit 的 Web UI。

Meilisearch / Typesense

可以与 Laravel Scout 集成,体验全文搜索。
  • Meilisearch: MEILISEARCH_HOST=http://meilisearch:7700
  • Typesense: TYPESENSE_HOST=typesenseTYPESENSE_PORT=8108

RustFS(S3 兼容存储)

若生产环境计划使用 Amazon S3,可以在本地模拟 S3 兼容存储。

运行测试

sail test 内部等同于 sail artisan test。默认会准备专用的 testing 数据库,不会影响开发数据。

Laravel Dusk

使用 Sail 时无需在本地安装 Selenium 就可运行 Dusk 浏览器测试。 请取消 compose.yaml 中 Selenium 服务的注释。
在 Apple Silicon(M1/M2/M3)上请使用 selenium/standalone-chromium 镜像。
然后运行 Dusk 测试。

PHP / Node 版本

更改 PHP 版本

修改 compose.yamllaravel.test 容器的 build.context
更改后请重新构建镜像。

追加 PHP 扩展

Sail 运行时镜像已包含常见 PHP 扩展。若应用需要额外扩展,可以在 compose.yamllaravel.test 服务里通过 PHP_EXTENSIONS 构建参数以空格分隔来指定,在构建镜像时一并安装。
更新 compose.yaml 之后请重新构建镜像。

更改 Node 版本


分享站点

为了让同事预览或测试 Webhook,你可以临时将站点暴露到外部。
会生成一个随机的 laravel-sail.site URL。为了让 URL 生成辅助函数正常工作,请在 bootstrap/app.php 中配置信任代理。
也可以指定子域名。

Xdebug

启用

先通过 sail:publish 发布配置文件,然后在 .env 中添加:
确认发布的 php.ini 文件包含以下配置:
修改后请重新构建镜像。

CLI 调试

浏览器调试

在浏览器中启动调试会话的步骤请参阅 Xdebug 官方文档。 若使用 PhpStorm,Zero-configuration debugging 的设置很方便。
Sail 使用 artisan serve 提供服务。 只有 Laravel 8.53.0 及以后版本才接受 XDEBUG_CONFIGXDEBUG_MODE。 更早的版本下调试连接不会生效。

自定义

要自定义 Sail 的 Dockerfile 或配置文件,请使用 sail:publish 命令进行发布。
发布后 Dockerfile 会放置在 docker/ 目录下。 修改后请重新构建容器。

与生产环境的区别

Sail 是仅用于本地开发的环境,不适合用于生产。 生产环境的 Docker 部署可考虑 Laravel Cloud、Forge、Ploi 等服务, 或者自行搭建 Docker Compose / Kubernetes 配置。
Sail 与生产环境的主要差异如下:
最后修改于 2026年7月18日