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

基于Serverless Framework的Docker化Node API无法运行求助

解决Serverless Framework Docker化Lambda的Runtime.InvalidEntrypoint错误

错误原因分析

出现Runtime.InvalidEntrypoint且伴随exec format error,核心问题是镜像CPU架构与Lambda运行环境不兼容:

  • 若本地是ARM架构(如Apple Silicon Mac),Docker默认构建arm64镜像,但AWS Lambda默认使用x86_64运行环境,导致镜像内的二进制文件(包括Lambda入口脚本)无法在目标环境执行。
  • serverless.yml中重复配置command字段,可能与Dockerfile的CMD产生冲突,干扰入口点识别。

解决方案

方案1:适配Lambda默认x86_64环境

修改serverless.yml,指定构建x86_64架构镜像,并移除重复的command配置:

service: lambda-hello

provider:
  name: aws
  region: ap-southeast-1
  ecr:
    images:
      appimage:
        path: ./
        platform: linux/amd64 # 强制构建x86_64架构镜像

functions:
  hello:
    image:
      name: appimage # 移除原有的command字段,使用Dockerfile的CMD配置
    events:
      - http:
          path: /{any+}
          method: any

Dockerfile保持原内容不变:

FROM public.ecr.aws/lambda/nodejs:18

COPY package.json ./
RUN npm install

COPY app.js .
CMD ["app.handler"]

方案2:使用ARM架构Lambda(成本更低)

若想利用Lambda的arm64架构优势(性价比更高),修改如下:

  1. 调整Dockerfile使用arm64版本的基础镜像:
FROM public.ecr.aws/lambda/nodejs:18-arm64

COPY package.json ./
RUN npm install

COPY app.js .
CMD ["app.handler"]
  1. 修改serverless.yml指定Lambda架构为arm64:
service: lambda-hello

provider:
  name: aws
  region: ap-southeast-1
  architecture: arm64 # 指定Lambda使用arm64运行环境
  ecr:
    images:
      appimage:
        path: ./
        platform: linux/arm64 # 构建arm64架构镜像

functions:
  hello:
    image:
      name: appimage
    events:
      - http:
          path: /{any+}
          method: any

重新部署

执行以下命令重新部署服务:

serverless deploy

部署完成后,访问API Gateway或Lambda函数URL即可正常返回Hello, world!响应。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 00:47:18