在API Platform的PHP Dockerfile中安装Redis扩展失败,求解决方案
phpize失败问题 问题描述
在API Platform的PHP Dockerfile中添加以下命令安装Redis扩展:
RUN pecl install -o -f redis \ && rm -rf /tmp/pear \ && docker-php-ext-enable redis
执行docker-compose build构建时触发错误:
[app-php php_base 5/14] RUN pecl install -o -f redis && rm -rf /tmp/pear && docker-php-ext-enable redis:
#0 2.750 downloading redis-6.0.2.tgz ...
#0 2.750 Starting to download redis-6.0.2.tgz (365,966 bytes)
#0 2.750 ..........................................................................done: 365,966 bytes
#0 3.176 43 source files, building
#0 3.176 running: phpize
#0 3.180 Configuring for:
#0 3.180 PHP Api Version: 20220829
#0 3.180 Zend Module Api No: 20220829
#0 3.180 Zend Extension Api No: 420220829
#0 3.193 Cannot find autoconf. Please check your autoconf installation and the
#0 3.193 $PHP_AUTOCONF environment variable. Then, rerun this script.
#0 3.193
#0 3.193 ERROR: `phpize' failed
failed to solve: process "/bin/sh -c pecl install -o -f redis && rm -rf /tmp/pear && docker-php-ext-enable redis" did not complete successfully: exit code: 1
解决方案
方法1:补全编译依赖后使用pecl安装
错误根源是容器缺少编译PHP扩展必需的autoconf及相关构建工具。需先安装这些依赖,再执行扩展安装命令:
基于Debian/Ubuntu的镜像
# 安装编译依赖 RUN apt-get update && apt-get install -y \ autoconf \ build-essential \ && rm -rf /var/lib/apt/lists/* # 安装并启用Redis扩展 RUN pecl install -o -f redis \ && rm -rf /tmp/pear \ && docker-php-ext-enable redis
基于Alpine的镜像
RUN apk add --no-cache \ autoconf \ g++ \ make \ && pecl install -o -f redis \ && rm -rf /tmp/pear \ && docker-php-ext-enable redis \ && apk del autoconf g++ make
(安装完成后删除构建工具,减小镜像体积)
方法2:使用自动扩展安装脚本(推荐)
利用第三方扩展安装脚本可以自动处理所有依赖,无需手动安装编译工具,是Docker环境下安装PHP扩展的更简洁方案:
# 下载扩展安装脚本并赋予执行权限 ADD https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/ RUN chmod +x /usr/local/bin/install-php-extensions && \ install-php-extensions redis
这个脚本会自动检测系统环境,下载并编译指定扩展,同时清理临时文件和不必要的依赖。
内容的提问来源于stack exchange,提问作者Astro-Otter

