Alpine 3.14 Docker环境安装php7.2-openssl及Composer报错问题咨询
问题成因
你的猜测完全正确,核心问题就是第三方PHP源和Alpine基础镜像版本不匹配,具体原因如下:
- phpearth提供的Alpine v3.7源是针对Alpine 3.7系统构建的,依赖的系统库为旧版本:openssl 1.0.x对应的动态库是
libcrypto.so.42、libssl.so.44;而Alpine 3.14.2自带的openssl版本为1.1.x,提供的动态库是libcrypto.so.1.1、libssl.so.1.1,两个大版本完全不兼容,所以安装php7.2-openssl时会出现依赖库缺失报错。 - phpearth源早已停止维护,没有适配Alpine 3.14等高版本的PHP7.2相关包,即便强制安装也会因为依赖不匹配导致扩展无法被PHP正常加载,所以PHP识别不到openssl扩展,自然没有https请求的封装支持,出现对应的报错。
解决方案
方案一:保留Alpine 3.14基础镜像,手动编译openssl扩展
该方案适合对Alpine系统版本有硬性要求的场景,操作步骤如下:
- 先安装编译所需的依赖包:
RUN apk add --no-cache autoconf gcc g++ make openssl-dev php7.2-dev
- 获取PHP7.2对应版本的源码包,解压后进入openssl扩展目录编译安装:
# 拿到PHP7.2源码压缩包后执行以下操作 RUN tar zxf php-7.2.*.tar.gz && \ cd php-7.2.*/ext/openssl && \ phpize && \ ./configure --with-openssl && \ make && make install && \ echo "extension=openssl.so" > /etc/php7.2/conf.d/openssl.ini
- 验证扩展是否正常加载:
RUN php -m | grep openssl
输出openssl即代表扩展加载成功,此时PHP就可以正常发起https请求,也可以正常安装Composer。
方案二:降级Alpine基础镜像到3.7版本
如果对Alpine系统版本没有强制要求,可以直接将基础镜像替换为alpine:3.7,和你添加的源版本保持一致,原有添加源、安装PHP7.2及扩展的命令都可以正常运行,不需要额外修改即可解决依赖问题。
注意:Alpine 3.7已经停止官方维护,存在已知安全漏洞,生产环境使用建议优先选择方案一,或者升级PHP版本到7.4及以上,可以直接使用Alpine 3.14官方源中的PHP包,无需添加第三方源,也不会出现依赖匹配问题。
内容的提问来源于stack exchange,提问作者Kevin Souza
相关产品推荐
相关产品推荐

