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

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

直接用 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 部署” 其实只是本地开发镜像直接扔到云服务器上裸跑。


# mysql  # php  # laravel  # redis  # docker  # composer  # nginx  # app  # 云服务  # 端口  # 工具  # 架构  # 封装  # require  #   # class  # internal  # 数据库  # 云服务器  # 容器内  # 会报  # 这是  # 就能  # 不需要  # 就不  # 会在  # 并在  # 你自己  # 很容易 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 简历没回改:利用AI润色让你的文字更专业  Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】  Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】  Laravel Session怎么存储_Laravel Session驱动配置详解  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载  制作公司内部网站有哪些,内网如何建网站?  Laravel如何为API编写文档_Laravel API文档生成与维护方法  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  Laravel如何实现模型的全局作用域?(Global Scope示例)  Laravel如何使用.env文件管理环境变量?(最佳实践)  打开php文件提示内存不足_怎么调整php内存限制【解决方案】  Linux系统命令中screen命令详解  Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  HTML透明颜色代码怎么让下拉菜单透明_下拉菜单透明背景指南【技巧】  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  EditPlus中的正则表达式实战(5)  JS弹性运动实现方法分析  Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】  bing浏览器学术搜索入口_bing学术文献检索地址  如何在景安云服务器上绑定域名并配置虚拟主机?  谷歌浏览器下载文件时中断怎么办 Google Chrome下载管理修复  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  ChatGPT 4.0官网入口地址 ChatGPT在线体验官网  中山网站推广排名,中山信息港登录入口?  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤  Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解  七夕网站制作视频,七夕大促活动怎么报名?  Bootstrap CSS布局之列表  常州企业网站制作公司,全国继续教育网怎么登录?  jquery插件bootstrapValidator表单验证详解  ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】  矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?  网站建设要注意的标准 促进网站用户好感度!  软银砸40亿美元收购DigitalBridge 强化AI资料中心布局  VIVO手机上del键无效OnKeyListener不响应的原因及解决方法  今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】  如何解决hover在ie6中的兼容性问题  Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程  Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】  Win11怎么设置默认图片查看器_Windows11照片应用关联设置  Android Socket接口实现即时通讯实例代码  Linux系统命令中tree命令详解  lovemo网页版地址 lovemo官网手机登录  百度浏览器如何管理插件 百度浏览器插件管理方法  PHP 500报错的快速解决方法  如何用腾讯建站主机快速创建免费网站?