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

php:7.3-fpm-alpine3.13/3.14安装readline扩展失败求解决方案

问题原因

Alpine Linux 3.13及以上版本自带的libedit-dev库移除了对GNU Readline几个冷门变量的兼容,而PHP 7.3版本的readline扩展源码默认引用了这几个变量(rl_mark、rl_pending_input、rl_completion_suppress_append),最终导致编译报错。

可行解决方案

根据你的使用场景可以任选以下任意一种方案解决:


方案1:使用基于Alpine 3.12的PHP镜像(最省心)

直接将基础镜像更换为php:7.3-fpm-alpine3.12,该版本镜像携带的libedit版本与PHP7.3的readline扩展完全兼容,无需修改其他配置:

FROM php:7.3-fpm-alpine3.12

RUN apk add --update --no-cache libedit-dev
RUN docker-php-ext-install -j$(nproc) readline

方案2:给PHP readline扩展打补丁(兼容高版本Alpine)

如果必须使用Alpine 3.13+版本的镜像,可以在安装扩展前修改readline扩展的源码,删除对不存在变量的引用。这三个变量仅用于readline_info()函数的返回值,修改后不影响命令行交互、历史记录、补全等readline核心功能,绝大多数业务场景都可以正常使用:

FROM php:7.3-fpm-alpine

RUN apk add --update --no-cache libedit-dev
# 拉取PHP扩展源码
RUN docker-php-source extract
# 注释源码中对不存在变量的引用
RUN sed -i 's/^.*rl_mark.*$/\/* & *\//' /usr/src/php/ext/readline/readline.c \
    && sed -i 's/^.*rl_pending_input.*$/\/* & *\//' /usr/src/php/ext/readline/readline.c \
    && sed -i 's/^.*rl_completion_suppress_append.*$/\/* & *\//' /usr/src/php/ext/readline/readline.c
# 编译安装扩展
RUN docker-php-ext-install -j$(nproc) readline
# 清理源码冗余
RUN docker-php-source delete

方案3:编译安装GNU Readline替代libedit(保留完整功能)

如果需要完整保留readline扩展的所有功能,可以不用Alpine自带的libedit,自行编译安装原生GNU Readline库:

FROM php:7.3-fpm-alpine

RUN apk add --update --no-cache build-base curl
# 下载编译GNU Readline库
RUN curl -fsSL https://ftp.gnu.org/gnu/readline/readline-8.2.tar.gz | tar xz \
    && cd readline-8.2 \
    && ./configure --prefix=/usr/local \
    && make -j$(nproc) \
    && make install \
    && cd .. && rm -rf readline-8.2
# 配置PHP readline扩展使用刚安装的GNU Readline
RUN docker-php-ext-configure readline --with-readline=/usr/local
RUN docker-php-ext-install -j$(nproc) readline

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 18:18:00