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

Docker中用Swoole运行Laravel Octane:Laravel\Octane\Octane类找不到错误

Docker容器中运行Laravel Octane + Swoole提示找不到Laravel\Octane\Octane类

我在Docker容器中尝试用Swoole作为应用服务器运行Laravel Octane应用,但启动时触发致命错误,提示找不到Laravel\Octane\Octane类。已按照Octane搭配Swoole的官方步骤完成配置,包括安装必要扩展和Dockerfile设置,相关环境配置如下:

Dockerfile

FROM php:8.3.7-fpm-alpine
RUN apk add --no-cache linux-headers

RUN apk --no-cache upgrade && \
    apk --no-cache add bash git sudo openssh  libxml2-dev oniguruma-dev autoconf gcc g++ make npm freetype-dev libjpeg-turbo-dev libpng-dev libzip-dev ssmtp

# PHP: Install php extensions
RUN pecl channel-update pecl.php.net
RUN pecl install pcov swoole
RUN docker-php-ext-configure gd --with-freetype --with-jpeg
RUN docker-php-ext-install mbstring xml  pcntl gd zip sockets pdo  pdo_mysql bcmath soap
RUN docker-php-ext-enable mbstring xml gd  zip pcov pcntl sockets bcmath pdo  pdo_mysql soap swoole


RUN docker-php-ext-install pdo pdo_mysql sockets
RUN apk add icu-dev
RUN docker-php-ext-configure intl && docker-php-ext-install mysqli pdo pdo_mysql intl
RUN curl -sS https://getcomposer.org/installer | php -- \
    --install-dir=/usr/local/bin --filename=composer
RUN apk add gnupg
#Download the desired package(s)
RUN curl -k -O  https://download.microsoft.com/download/e/4/e/e4e67866-dffd-428c-aac7-8d28ddafb39b/msodbcsql17_17.10.5.1-1_amd64.apk
RUN curl -k -O  https://download.microsoft.com/download/e/4/e/e4e67866-dffd-428c-aac7-8d28ddafb39b/mssql-tools_17.10.1.1-1_amd64.apk

#(Optional) Verify signature, if 'gpg' is missing install it using 'apk add gnupg':
RUN curl -k -O  https://download.microsoft.com/download/e/4/e/e4e67866-dffd-428c-aac7-8d28ddafb39b/msodbcsql17_17.10.5.1-1_amd64.sig
RUN curl -k -O  https://download.microsoft.com/download/e/4/e/e4e67866-dffd-428c-aac7-8d28ddafb39b/mssql-tools_17.10.1.1-1_amd64.sig

RUN curl https://packages.microsoft.com/keys/microsoft.asc  | gpg --import -
RUN gpg --verify msodbcsql17_17.10.5.1-1_amd64.sig msodbcsql17_17.10.5.1-1_amd64.apk
RUN gpg --verify mssql-tools_17.10.1.1-1_amd64.sig mssql-tools_17.10.1.1-1_amd64.apk

#Install the package(s)
RUN apk add --allow-untrusted msodbcsql17_17.10.5.1-1_amd64.apk
RUN apk add --allow-untrusted mssql-tools_17.10.1.1-1_amd64.apk

#Extensiones necesarias para poder instalar los drivers de sql server con pecl
RUN apk update && \
    apk add --no-cache unixodbc-dev jpeg-dev zlib-dev gd-dev

#Instala las extensiones de PHP para SQL Server
RUN pecl install sqlsrv pdo_sqlsrv \
    && docker-php-ext-enable sqlsrv pdo_sqlsrv
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
COPY --from=spiralscout/roadrunner:2.4.2 /usr/bin/rr /usr/bin/rr

WORKDIR /app
COPY . .

RUN composer clear-cache
RUN composer install
RUN composer require laravel/octane spiral/roadrunner
COPY .env .env
RUN mkdir -p /app/storage/logs

RUN php artisan octane:install --server="swoole"
CMD php artisan octane:start --server="swoole" --host="192.168.4.234" --port=8001

docker-compose.yml

version: "3.7"

services:
  gui:
    image: gui
    build: ./gui
    volumes:
      - ./gui:/app
    ports:
      - 5173:80
    depends_on:
      - api
    networks:
      - my-network

  api:
    image: api
    build: ./api
    ports:
      - "8000:8000"
    networks:
      - my-network

networks:
  my-network:
    driver: bridge

容器日志

Log container:2024-08-15 11:14:04 
2024-08-15 11:14:04    INFO  Server running…
2024-08-15 11:14:04 
2024-08-15 11:14:04   Local: http://192.168.4.234:8001 
2024-08-15 11:14:04 
2024-08-15 11:14:04   Press Ctrl+C to stop the server
2024-08-15 11:14:04 
2024-08-15 11:14:04 Fatal error: Uncaught Error: Class "Laravel\Octane\Octane" not found in /app/vendor/laravel/octane/src/Stream.php:56
2024-08-15 11:14:04 Stack trace:
2024-08-15 11:14:04 #0 /app/vendor/laravel/octane/bin/createSwooleServer.php(19): Laravel\Octane\Stream::shutdown(Object(Swoole\Exception))
2024-08-15 11:14:04 #1 /app/vendor/laravel/octane/bin/swoole-server(35): require('/app/vendor/lar...')
2024-08-15 11:14:04 #2 {main}
2024-08-15 11:14:04   thrown in /app/vendor/laravel/octane/src/Stream.php on line 56

已尝试的解决方法:

  • 确认所有依赖已正确安装
  • 检查Laravel与Octane版本兼容性
  • 排查依赖冲突问题

但问题仍未解决,求相关解决建议。


解决建议
  • 重新生成Composer自动加载映射
    在Dockerfile中composer require之后添加composer dump-autoload -o命令,强制生成优化后的类映射文件,确保PHP能正确找到Octane类:

    RUN composer require laravel/octane spiral/roadrunner
    RUN composer dump-autoload -o
    
  • 调整Dockerfile依赖安装顺序
    先复制composer.json和composer.lock到容器,提前安装依赖并生成自动加载,再复制项目其他文件,既利用Docker缓存,也避免文件覆盖导致的依赖问题:

    WORKDIR /app
    
    # 先处理依赖配置,缓存依赖层
    COPY composer.json composer.lock ./
    RUN composer clear-cache
    RUN composer install --no-scripts --no-autoloader
    RUN composer require laravel/octane spiral/roadrunner
    RUN composer dump-autoload -o
    RUN composer run-scripts
    
    # 再复制项目代码
    COPY . .
    
  • 验证Octane安装完整性
    进入运行中的容器,执行ls /app/vendor/laravel/octane/src/Octane.php,如果文件不存在,说明Octane未正确安装,重新执行composer require laravel/octane。

  • 检查Swoole扩展状态
    在容器内执行php -m | grep swoole,确认Swoole扩展已启用。如果未显示,检查Dockerfile中docker-php-ext-enable swoole命令是否生效,可尝试在pecl install swoole后直接添加--enable-swoole参数。

  • 修复目录权限
    部分场景下vendor目录权限不足会导致PHP无法读取类文件,执行以下命令修复:

    chown -R www-data:www-data /app/vendor
    chmod -R 755 /app/vendor
    
  • 检查容器工作目录
    确认WORKDIR /app配置正确,所有项目文件都在/app目录下,执行pwd和ls /app验证路径和文件存在性。


内容的提问来源于stack exchange,提问作者Brayan Gomez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 15:24:50