在 NodeJS 应用的 Docker 中将 curl 和 libcurl 更新到最新版本

Update curl and libcurl to latest version in Docker in NodeJS app

提问人:merilstack 提问时间:11/9/2023 更新时间:11/9/2023 访问量:80

问:

Dockerfile对于我的 NodeJS 应用程序,如下所示

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 和 libcurl

RUN apk add --no-cache curl

但是当我进入我的容器并检查卷曲版本时

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 和 libcurl 升级到最新版本?curl 7.74.0curl 8.4.08.4.0

节点 .js linux docker curl dockerfile

评论


答:

0赞 Hans Kilian 11/9/2023 #1

你使用的是多阶段 Dockerfile,并在第一阶段进行安装。该安装不会延续到最后阶段。curl

在最终图像中,有(至少)2种更新方法curl

  • 您可以在映像中更新。那将 更新基础映像所有用户的 curl。curlapp-base/docker-base
  • 您可以在 Dockerfile 的最后阶段安装 8.4.0。如何执行此操作取决于映像中可用的包管理器。curlapp-base/docker-base
1赞 Vinosh M G 11/9/2023 #2

若要升级到 Dockerfile 中的最新版本,有几个选项:curllibcurl

  1. 在基础映像中更新

如前所述,您可以在用作最后阶段的图像中更新和更新。这样做的好处是可以升级使用该基础映像的所有映像,但需要更新基础映像。curllibcurlapp-base/docker-base

  1. 在最后阶段安装

您可以安装 Dockerfile 的最新版本和最后阶段的版本。这只会升级该特定映像。curllibcurl

由于您使用的是 Alpine Linux,因此可以运行:

RUN apk update \
    && apk add curl libcurl

这将从 Alpine 存储库安装最新的可用版本。

  1. 从 curl 的 Docker 镜像中提取

您可以直接从官方 Docker 镜像中拉取以获取最新版本:curl

FROM curl:latest

# Rest of Dockerfile...

这可确保您始终拥有绝对最新的和 .curllibcurl

  1. 从源代码安装

作为最后的手段,您可以安装并从源代码获取特定版本。这更复杂,但可以让您完全控制。curllibcurl