Laravel怎么使用Docker环境部署_Laravel Sail安装配置与容器化管理【方案】

13次阅读

laravel Sail 是 Laravel 9+ 默认集成的轻量级 docker 开发方案,封装 nginxphp-FPM、mysql 等服务,自动处理依赖顺序与网络配置;需修正 docker-compose.yml 路径、.env 主机配置及时区,并在容器内执行 composer install;生产环境须导出并精简配置,不可直接使用 sail up -d。

Laravel怎么使用Docker环境部署_Laravel Sail安装配置与容器化管理【方案】

直接用 Laravel Sail 部署 Docker 环境是目前最轻量、最贴近官方推荐的方案——它不是“可选工具”,而是 Laravel 9+ 默认集成的容器化入口,不需要手写 docker-compose.yml 就能跑起完整开发

为什么不用自己写 docker-compose.yml?

Sail 的核心价值是把常见组合(Nginx + PHP-FPM + MySQL + redis + MailHog + Selenium)封装成开箱即用的 CLI 工具,避免重复配置网络、卷映射、环境变量顺序等易错点。你自己写的 docker-compose.yml 很容易在 app_SERVICEphp-fpm 容器间出现 socket 连接超时,或因 mysql 容器启动慢导致 Laravel 迁移失败。

  • sail up 自动等待 MySQL 就绪后再启动应用服务
  • 所有服务默认使用 sail 网络,PHP 容器内访问 mysql 就是 DNS 名字,无需 127.0.0.1host.docker.internal
  • .env 中的 DB_HOST=mysqlREDIS_HOST=redis 是生效前提,不是占位符

安装 Sail 后必须改的三个地方

运行 composer require laravel/sail --dev 并执行 php artisan sail:install 后,别急着 sail up。以下三处不改,90% 的人会卡在 502 或数据库连接拒绝:

  • 检查 docker-compose.ymlbuild.context 是否指向项目根目录(不是 ./vendor/laravel/sail/runtimes/8.2 这类绝对路径)
  • 确认 .envDB_HOST=mysqlREDIS_HOST=redisMAIL_MAILER=smtpMAIL_HOST=mailhog
  • PHP 容器内时区必须和宿主机一致,否则日志/队列时间错乱:在 docker-compose.ymllaravel.test 服务下加 environment 块:
    environment:   - APP_TIMEZONE=Asia/Shanghai   - TZ=Asia/Shanghai

sail artisan 命令总提示 class not found?

这是最常被忽略的权限与自动加载问题:Sail 的 sail artisan 实际在 laravel.test 容器里执行,但 vendor/autoload.php 如果由宿主机(比如 Mac M1)生成,可能含不兼容的扩展或缓存。解决方式不是重装依赖,而是强制容器内生成:

  • sail down 停掉所有容器
  • 删掉宿主机上的 vendor/composer.lock
  • 运行 sail composer install —— 这一步会在 PHP 容器内执行,生成匹配容器架构的 autoloader
  • sail up -d 启动,sail artisan migrate 就不会报 Class 'App\Models\User' not found

生产环境别用 sail up -d

Sail 是为开发设计的:它默认暴露 8000 端口、启用 Xdebug、挂载整个项目目录为 volume、日志直写 stdout。上线时这些全是风险点。真正上生产应导出配置:sail artisan sail:publish,然后手动删掉 xdebug 扩展、注释 volumes 下的源码挂载、把 APP_ENV=production 写死进 docker-compose.yml 的 environment 块,并用 Nginx 反向代理替换 Sail 自带的简易服务器。否则你看到的 “Docker 部署” 其实只是本地开发镜像直接扔到云服务器上裸跑。

text=ZqhQzanResources