You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel Sail结合GitHub Actions:容器启动时如何运行artisan与composer命令

部署Laravel Sail应用时,artisan和composer命令的执行位置建议

结论:不要放在Dockerfile里,应该在GitHub Actions的部署脚本中执行(需修正当前命令的问题)

为什么不能放Dockerfile里?

  • Dockerfile中的RUN指令是构建镜像阶段执行的,此时容器未启动,且Laravel Sail默认通过卷挂载服务器上的应用代码,构建时的代码和部署时拉取的最新代码不一致。
  • composer dump-autoload需要基于当前最新代码生成自动加载文件,构建镜像时执行的话,完全无法适配部署后的新代码。
  • php artisan optimize:clear是清理运行时缓存,构建阶段不存在缓存,执行该命令没有意义。

GitHub Actions脚本的修正方案

你当前脚本里的docker exec -it laravel9-dashboard-laravel-1 bash是交互式进入容器,CI环境没有交互式终端,会执行失败。直接去掉进入容器的步骤,用非交互式方式执行命令即可:

修改GitHub Actions中ssh任务的script部分:

cd laravel9-dashboard
docker-compose down
docker container prune -y
git pull origin main
docker build -t laravel9-dashboard . --no-cache
docker-compose up -d --remove-orphans
# 直接执行命令,无需进入容器
docker exec laravel9-dashboard-laravel-1 php artisan optimize:clear
docker exec laravel9-dashboard-laravel-1 composer dump-autoload

额外优化建议

如果希望这些命令在每次容器启动时自动执行(比如容器意外重启后),可以修改Laravel Sail的start-container脚本:

  1. 在项目根目录的start-container文件末尾添加:
    su sail -c "php artisan optimize:clear"
    su sail -c "composer dump-autoload"
    
  2. 重新构建镜像(Dockerfile中已COPY该脚本),这样每次容器启动时都会自动执行这两个命令。不过一般部署时执行一次就足够,按需选择即可。

内容的提问来源于stack exchange,提问作者PHP User

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 18:55:35