基于CentOS7.x的Docker镜像中如何将cURL升级到7.71.0
CentOS 7 Docker环境升级cURL到7.71.0实操方案
CentOS 7官方软件源为了保证系统底层ABI兼容性,将内置cURL版本永久锁定在7.29.0,无法通过默认yum upgrade curl命令升级到更高版本,以下两种方案均经过Docker场景验证,可正常支持--retry-all-errors参数。
方案一:源码编译安装(生产环境推荐)
该方案实现新旧版本cURL共存,不会覆盖系统内置cURL导致yum等系统工具异常,版本完全可控,适合生产镜像使用。
直接在Dockerfile中添加如下构建步骤即可:
FROM centos:7 # 安装编译依赖,安装完成后立即清理缓存减小镜像体积 RUN yum install -y gcc make openssl-devel zlib-devel wget && \ yum clean all && \ rm -rf /var/cache/yum/* # 编译安装cURL 7.71.0 RUN cd /tmp && \ wget https://curl.se/download/curl-7.71.0.tar.gz && \ tar zxf curl-7.71.0.tar.gz && \ cd curl-7.71.0 && \ ./configure --with-openssl --prefix=/usr/local && \ make -j$(nproc) && \ make install && \ # 配置动态链接库路径 echo "/usr/local/lib" > /etc/ld.so.conf.d/curl.conf && \ ldconfig && \ # 清理编译残留文件 rm -rf /tmp/curl-7.71.0*
构建完成后进入容器执行curl --version,即可看到版本为7.71.0,--retry-all-errors参数可正常调用。
注意:禁止卸载系统内置的旧版cURL,否则会导致yum工具无法运行。
方案二:第三方源安装(构建速度优先)
如果不想等待编译过程,可以使用维护了CentOS 7适配新版cURL的第三方源直接安装指定版本,构建速度更快。
Dockerfile构建步骤如下:
FROM centos:7 # 配置第三方cURL源 RUN rpm --import https://www.city-fan.org/ftp/contrib/yum-repo/RPM-GPG-KEY-city-fan.org && \ curl -o /etc/yum.repos.d/city-fan.repo https://www.city-fan.org/ftp/contrib/yum-repo/city-fan.org.repo && \ # 从第三方源安装指定版本cURL yum install -y --enablerepo=city-fan.org curl-7.71.0 && \ yum clean all && \ rm -rf /var/cache/yum/*
注意:该方案会升级系统依赖的libcurl版本,如果镜像内有其他业务程序强依赖旧版libcurl的符号表,需要提前做兼容性验证,避免程序启动失败。
内容的提问来源于stack exchange,提问作者Ilan Rosenbaum
相关产品推荐
相关产品推荐

