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

Docker部署PHP时Redis类找不到:extension_loaded返回true

解决Docker部署PHP时Redis扩展加载异常问题

问题现象

调用extension_loaded('redis')返回true,但运行代码时提示“Class "Redis" not found”。使用的Dockerfile如下:

FROM php:7.1.32-fpm-alpine3.10

ENV PHPREDIS_VERSION 5.2.2

RUN docker-php-source extract && \
  curl -L -o /tmp/redis.tar.gz https://github.com/phpredis/phpredis/archive/$PHPREDIS_VERSION.tar.gz && \
  tar xfz /tmp/redis.tar.gz && \
  rm -r /tmp/redis.tar.gz && \
  mv phpredis-$PHPREDIS_VERSION /usr/src/php/ext/redis && \
  docker-php-ext-install redis

ENTRYPOINT ["php-fpm"]

问题原因

phpredis 5.x版本对PHP 7.1的兼容性存在缺陷,默认编译配置未在全局命名空间注册Redis类,导致扩展虽加载成功但无法调用类。

解决方案

方案1:降级phpredis至兼容PHP7.1的稳定版

将phpredis版本改为4.3.0(该版本完全适配PHP7.1),修改后的Dockerfile如下:

FROM php:7.1.32-fpm-alpine3.10

ENV PHPREDIS_VERSION 4.3.0

RUN docker-php-source extract && \
  curl -L -o /tmp/redis.tar.gz https://github.com/phpredis/phpredis/archive/$PHPREDIS_VERSION.tar.gz && \
  tar xfz /tmp/redis.tar.gz && \
  rm -r /tmp/redis.tar.gz && \
  mv phpredis-$PHPREDIS_VERSION /usr/src/php/ext/redis && \
  docker-php-ext-install redis

ENTRYPOINT ["php-fpm"]

方案2:编译时指定兼容配置(可选)

若坚持使用phpredis 5.x,可在编译前添加配置参数强制启用全局命名空间支持,修改RUN指令:

RUN docker-php-source extract && \
  curl -L -o /tmp/redis.tar.gz https://github.com/phpredis/phpredis/archive/$PHPREDIS_VERSION.tar.gz && \
  tar xfz /tmp/redis.tar.gz && \
  rm -r /tmp/redis.tar.gz && \
  mv phpredis-$PHPREDIS_VERSION /usr/src/php/ext/redis && \
  docker-php-ext-configure redis --enable-redis && \
  docker-php-ext-install redis

验证方法

构建镜像后,进入容器执行以下命令验证:

  1. 检查扩展是否加载:php -m | grep redis
  2. 测试Redis类可用性:php -r "new Redis();"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 20:15:00