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

在AWS Lambda Python容器镜像中安装NodeJS遇阻求助

问题描述

我正尝试基于public.ecr.aws/lambda/python:3.11构建自定义Docker镜像,该镜像默认仅预装Python,但我需要在其中安装NodeJS,并通过NPM安装aws-cdk,以便借助Python Lambda向CloudFormation部署栈。尝试多种NodeJS安装方式均失败,当前使用的Dockerfile如下(部分已测试但无效的语句已注释):

FROM public.ecr.aws/lambda/python:3.11
# FROM public.ecr.aws/lambda/nodejs:18
# https://docs.aws.amazon.com/lambda/latest/dg/python-image.html#python-image-instructions

COPY . ${LAMBDA_TASK_ROOT}

# Install packages
# RUN yum -y update && \
#    yum -y install wget && \
#    yum install -y tar.x86_64 && \
#    yum clean all

# RUN yum install nodejs npm
# RUN touch ~/.bashrc && chmod +x ~/.bashrc
# RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash
# RUN . ~/.nvm/nvm.sh && nvm install node
RUN yum update
RUN yum install https://rpm.nodesource.com/pub_20.x/nodistro/repo/nodesource-release-nodistro-1.noarch.rpm -y
RUN yum install nsolid -y
# RUN curl --silent --location https://rpm.nodesource.com/setup_20.x | bash -
RUN yum install nodejs

RUN yum install -y python3
RUN yum install -y python3-pip
# RUN pip install --upgrade pip
RUN pip3 install -r requirements.txt

# Update NPM
RUN npm update -g
# Install AWSCLI
RUN pip3 install --upgrade awscli
# Install cdk
RUN npm install -g aws-cdk
RUN cdk --version

# Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile)
CMD [ "cdk_handler.handler" ]

遇到的错误

错误1:NodeSource包依赖不兼容

构建镜像时触发以下依赖错误:

1.950 Error: Package: nodesource-release-nodistro-1.noarch (/nodesource-release-nodistro-1.noarch)
1.950            Requires: glibc >= 2.28
1.950            Installed: glibc-2.26-63.amzn2.x86_64 (@amzn2-core)
1.950                glibc = 2.26-63.amzn2
1.950            Available: glibc-2.25-10.amzn2.0.1.x86_64 (amzn2-core)
1.950                glibc = 2.25-10.amzn2.0.1
1.950            Available: glibc-2.26-27.amzn2.0.4.x86_64 (amzn2-core)
1.950                glibc = 2.26-27.amzn2.0.4
1.950            Available: glibc-2.26-27.amzn2.0.5.i686 (amzn2-core)
1.950                glibc = 2.26-27.amzn2.0.5
...

错误2:yum源中无nodejs包

仅执行RUN yum install nodejs时,出现找不到包的错误:

> [ 4/11] RUN yum install nodejs:
0.401 Loaded plugins: ovl
0.620 No package nodejs available.
0.633 Error: Nothing to do
解决方案

public.ecr.aws/lambda/python:3.11基于Amazon Linux 2,系统glibc版本为2.26,无法满足NodeSource最新源对glibc >=2.28的要求。因此推荐通过下载预编译的NodeJS二进制包直接安装,绕过系统包管理的依赖限制。

修改后的完整Dockerfile:

FROM public.ecr.aws/lambda/python:3.11

COPY . ${LAMBDA_TASK_ROOT}

# 安装下载和解压所需工具
RUN yum update -y && \
    yum install -y wget tar && \
    yum clean all

# 下载并安装兼容的NodeJS版本(18.x兼容glibc 2.26)
RUN wget https://nodejs.org/dist/v18.20.4/node-v18.20.4-linux-x64.tar.xz && \
    tar -xJf node-v18.20.4-linux-x64.tar.xz && \
    mv node-v18.20.4-linux-x64/bin/node /usr/local/bin/ && \
    mv node-v18.20.4-linux-x64/bin/npm /usr/local/bin/ && \
    # 清理安装文件以减小镜像体积
    rm -rf node-v18.20.4-linux-x64 node-v18.20.4-linux-x64.tar.xz

# 验证NodeJS和NPM安装成功
RUN node --version && npm --version

# 安装Python依赖
RUN pip3 install --upgrade pip && \
    pip3 install -r requirements.txt

# 安装AWS CLI和AWS CDK
RUN pip3 install --upgrade awscli && \
    npm install -g aws-cdk && \
    cdk --version

CMD [ "cdk_handler.handler" ]

关键说明

  • 选择NodeJS 18.x:该版本是长期支持版,且兼容Amazon Linux 2的glibc 2.26,无需升级系统库
  • 二进制包安装:直接将node和npm可执行文件放到系统PATH目录,避免yum源的依赖问题
  • 清理冗余文件:安装后删除下载的压缩包和解压目录,减少镜像体积

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 20:40:57