Docker中从PECL仓库安装扩展报错:不再支持大括号访问数组字符串偏移
报错根因
报错是因为Debian/Ubuntu官方源自带的php-pear包版本老旧,仍使用PHP 8.0已彻底移除的「大括号访问数组/字符串偏移量」语法,导致pecl命令运行时直接抛出致命错误。
解决步骤
方案一:手动升级PEAR/PECL到兼容PHP8的版本(推荐)
在安装php-pear之后、执行pecl install之前,新增命令更新PEAR到最新兼容版本:
RUN pear update-channels && pear upgrade --force pear/pear
升级完成后再执行pecl install sqlsrv pdo_sqlsrv即可正常运行。
方案二:直接用预编译deb包安装扩展(无需使用pecl)
如果不想调整PEAR版本,可以直接安装对应PHP版本的官方预编译扩展包:
- 先完成微软ODBC驱动的前置安装步骤
- 执行以下命令直接安装扩展:
RUN apt-get install -y php8.0-sqlsrv php8.0-pdo-sqlsrv
额外注意事项
- 你当前的命令顺序存在错误:
apt-get update应该放在所有apt-get install命令之前,避免安装到过期版本的软件包 - 若使用pecl方式安装扩展,安装完成后需要手动启用扩展,新增如下命令:
RUN docker-php-ext-enable sqlsrv pdo_sqlsrv
内容的提问来源于stack exchange,提问作者Greg Ostry
相关产品推荐
相关产品推荐

