如何避免手动执行php artisan octane:reload?Docker环境适配方案
Laravel Octane Docker开发自动重载解决方案
方法1:文件监听脚本自动触发重载
在Docker容器内用inotify-tools监听代码变更,自动执行octane:reload:
- 安装依赖:在Dockerfile中添加
inotify-tools(Debian/Ubuntu镜像适用):RUN apt-get update && apt-get install -y inotify-tools && rm -rf /var/lib/apt/lists/* - 编写监听脚本:在项目根目录创建
watch-octane.sh:#!/bin/bash # 监听核心代码目录的增删改操作,排除无关目录 inotifywait -r -m -e modify,create,delete \ --exclude 'node_modules|storage|vendor' \ ./app ./config ./routes ./resources/views ./database \ | while read _ _ file; do echo "代码变更:$file -> 重载Octane..." php artisan octane:reload done - 设置权限:本地执行
chmod +x watch-octane.sh,确保容器内可执行 - 启动容器时同时运行脚本和Octane:修改
docker-compose.yml的app服务命令:services: app: # 保留原有卷挂载、端口等配置 command: bash -c "./watch-octane.sh & php artisan octane:start --server=swoole --host=0.0.0.0"
方法2:Laravel Sail内置自动重载(推荐Sail用户)
如果你的Docker环境基于Laravel Sail,直接用官方集成能力即可:
- 在
.env中设置OCTANE_SERVER=swoole或roadrunner - 确保
docker-compose.yml的app服务使用默认启动命令:command: start-sail
Sail会自动监听本地代码变更,无需额外配置就会触发Octane重载。
方法3:RoadRunner原生自动重载(RoadRunner驱动专属)
如果用RoadRunner作为Octane的服务器,直接修改.rr.yaml启用监听:
rpc: listen: tcp://127.0.0.1:6001 server: command: "php artisan octane:roadrunner" env: APP_ENV: local http: address: 0.0.0.0:8000 watch: enabled: true files: - "**/*.php" - ".env" exclude: - "node_modules/**" - "storage/**" - "vendor/**" interval: 1s
启动Octane时执行php artisan octane:start --server=roadrunner,RoadRunner会自动检测代码变更并重启服务。
关键注意点
- 必须确保Docker卷挂载了本地项目目录,否则容器无法感知本地代码修改
- 监听时排除
node_modules、vendor、storage等无关目录,避免不必要的重载 - Swoole的
octane:reload只会重载工作进程,比完全重启服务更快,开发效率更高
内容的提问来源于stack exchange,提问作者Eliyonai Molero
相关产品推荐
相关产品推荐

