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

如何在NodeJS应用Docker容器中将curl和libcurl升级至8.4.0

在容器中升级curl到8.4.0版本

问题背景

你使用多阶段构建的Dockerfile构建Node.js应用,build阶段基于node:14-alpine,最终镜像基于app-base/docker-base。尝试安装最新版curl后,进入最终容器执行curl --version得到以下输出:

root@my-app:/var/www/app# curl --version
curl 7.74.0 (x86_64-pc-linux-gnu) libcurl/7.74.0 OpenSSL/1.1.1n zlib/1.2.11 brotli/1.0.9 libidn2/2.3.0 libpsl/0.21.0 (+libidn2/2.3.0) libssh2/1.9.0 nghttp2/1.43.0 librtmp/2.3
Release-Date: 2020-12-09
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps mqtt pop3 pop3s rtmp rtsp scp sftp smb smbs smtp smtps telnet tftp
Features: alt-svc AsynchDNS brotli GSS-API HTTP2 HTTPS-proxy IDN IPv6 Kerberos Largefile libz NTLM NTLM_WB PSL SPNEGO SSL TLS-SRP UnixSockets

当前curl版本为7.74.0,需要升级至8.4.0。

你的Dockerfile内容如下:

FROM node:14-alpine AS build

# Install necessary packages using the 'apk' package manager
RUN apk update && \
    apk add --no-cache wget build-base openssl-dev

# Install a more recent version of curl
RUN apk add --no-cache curl

# Set the source folder
ARG SOURCE_FOLDER="./"
ARG BUILD_VERSION
ARG NPM_TOKEN

# Create app directory
WORKDIR /var/www/app

# Bundle app source
COPY ${SOURCE_FOLDER} .

# Run the build.sh script
RUN chmod +x build.sh && ./build.sh


RUN NODE_OPTIONS=--max_old_space_size=4096 lsc build site --output-hashing all --buildVersion=$BUILD_VERSION && \
    rm -f .npmrc

FROM app-base/docker-base

COPY --from=build /var/www/app/dist/ngx-rsc-app /var/www/app

问题分析

从curl --version的输出x86_64-pc-linux-gnu可以判断,你进入的最终容器基于Debian/Ubuntu类发行版(而非build阶段的Alpine),该基础镜像的默认软件源中curl版本停留在7.74.0,因此直接用系统包管理器无法获取8.4.0版本。

解决方案

方法一:添加curl官方源安装指定版本(推荐)

如果app-base/docker-base是Debian 11+或Ubuntu 20.04+,可以通过添加curl官方软件源来安装8.4.0版本:

修改Dockerfile的最终阶段:

FROM app-base/docker-base

# 安装依赖并配置curl官方源
RUN apt-get update && \
    apt-get install -y --no-install-recommends gnupg2 ca-certificates && \
    # 导入curl官方GPG密钥
    curl -fsSL https://curl.se/ca/curl-release.crt | gpg --dearmor -o /usr/share/keyrings/curl-archive-keyring.gpg && \
    # 添加curl官方源
    echo "deb [signed-by=/usr/share/keyrings/curl-archive-keyring.gpg] https://curl.se/deb/ $(lsb_release -sc) main" | tee /etc/apt/sources.list.d/curl.list && \
    # 更新源并安装curl 8.4.0
    apt-get update && \
    apt-get install -y --no-install-recommends curl=8.4.0-1~$(lsb_release -sc) && \
    # 清理缓存减少镜像体积
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

COPY --from=build /var/www/app/dist/ngx-rsc-app /var/www/app

方法二:从源码编译curl 8.4.0

如果无法添加外部软件源,可选择从源码编译安装:

修改Dockerfile的最终阶段:

FROM app-base/docker-base

# 安装编译依赖
RUN apt-get update && \
    apt-get install -y --no-install-recommends build-essential wget openssl libssl-dev zlib1g-dev libbrotli-dev libidn2-dev libpsl-dev libssh2-1-dev libnghttp2-dev librtmp-dev && \
    # 下载curl 8.4.0源码并编译
    wget https://curl.se/download/curl-8.4.0.tar.gz && \
    tar -xzf curl-8.4.0.tar.gz && \
    cd curl-8.4.0 && \
    ./configure --prefix=/usr --with-openssl --with-brotli --with-zlib --with-libidn2 --with-libpsl --with-libssh2 --with-nghttp2 --with-librtmp && \
    make -j$(nproc) && \
    make install && \
    # 清理编译文件和无用依赖
    cd .. && \
    rm -rf curl-8.4.0 curl-8.4.0.tar.gz && \
    apt-get purge -y build-essential wget && \
    apt-get autoremove -y && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

COPY --from=build /var/www/app/dist/ngx-rsc-app /var/www/app

补充:若需在build阶段的Alpine容器升级curl

如果是build阶段的Alpine容器需要新版curl,由于node:14-alpine对应Alpine 3.14,官方稳定源中curl版本为7.74.0,可临时使用Alpine Edge源安装:

# 在build阶段替换原curl安装命令
RUN apk add --no-cache curl --repository=http://dl-cdn.alpinelinux.org/alpine/edge/main

注意:Edge源为开发分支,包版本更新但可能存在稳定性风险,适合测试环境。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 17:04:55