在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
相关产品推荐
相关产品推荐

