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

如何避免手动执行php artisan octane:reload?Docker环境适配方案

Laravel Octane Docker开发自动重载解决方案

方法1:文件监听脚本自动触发重载

在Docker容器内用inotify-tools监听代码变更,自动执行octane:reload:

  1. 安装依赖:在Dockerfile中添加inotify-tools(Debian/Ubuntu镜像适用):
    RUN apt-get update && apt-get install -y inotify-tools && rm -rf /var/lib/apt/lists/*
    
  2. 编写监听脚本:在项目根目录创建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
    
  3. 设置权限:本地执行chmod +x watch-octane.sh,确保容器内可执行
  4. 启动容器时同时运行脚本和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,直接用官方集成能力即可:

  1. 在.env中设置OCTANE_SERVER=swoole或roadrunner
  2. 确保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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 22:28:29