清理Docker后构建失败:pecl安装sqlsrv报错如何解决?
解决pecl install sqlsrv构建失败的方案
问题根源
删除/var/lib/docker后,所有Docker缓存、基础镜像依赖被彻底清空,重新构建时缺失sqlsrv扩展编译所需的底层系统依赖,导致pecl安装报错。
修复步骤
1. 补全Dockerfile中的系统依赖
sqlsrv扩展编译依赖unixODBC开发库,根据你的基础镜像类型添加对应安装命令:
- Debian/Ubuntu 镜像:
RUN apt-get update && apt-get install -y --no-install-recommends \ unixodbc-dev \ && rm -rf /var/lib/apt/lists/*
- Alpine 镜像:
RUN apk add --no-cache \ unixodbc-dev \ g++ \ make
2. 确保PHP开发包已安装
pecl编译PHP扩展必须依赖PHP开发文件,Dockerfile里要加上:
# Debian/Ubuntu 示例 RUN apt-get update && apt-get install -y --no-install-recommends php-dev \ && rm -rf /var/lib/apt/lists/*
3. 指定sqlsrv稳定版本安装
避免新版本兼容性问题,直接指定适配PHP7.4的稳定版本:
RUN pecl install sqlsrv-5.10.1 pdo_sqlsrv-5.10.1
4. 手动安装Microsoft ODBC驱动(可选)
如果上述步骤仍失败,添加微软官方源安装ODBC驱动:
RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - \ && curl https://packages.microsoft.com/config/debian/10/prod.list > /etc/apt/sources.list.d/mssql-release.list \ && apt-get update \ && ACCEPT_EULA=Y apt-get install -y msodbcsql17 \ && rm -rf /var/lib/apt/lists/*
5. 彻底清理缓存后重新构建
执行以下命令清空残留缓存,再重新构建:
docker-compose down -v docker system prune -af docker-compose up -d --build
验证成功
容器启动后,进入容器执行php -m | grep sqlsrv,能看到sqlsrv和pdo_sqlsrv两个模块就说明安装成功。
内容的提问来源于stack exchange,提问作者tempra
相关产品推荐
相关产品推荐

