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

使用AWS Lambda Python容器时遇Runtime.InvalidEntrypoint错误求助

解决AWS Lambda自定义镜像中fork/exec /tmp: permission denied错误

问题本质

这个错误核心是Lambda运行时被要求执行**目录(/tmp)**而非可执行文件/合规启动脚本。Lambda自定义镜像要求ENTRYPOINT/CMD必须指向能启动Lambda运行时的程序,完全偏离这个规范就会触发权限拒绝。

可行解决办法

1. 保留基础镜像默认启动逻辑

public.ecr.aws/lambda/python:3.10自带合规的ENTRYPOINT和CMD,别直接把它们改成/tmp。正确的Dockerfile写法应该是只加依赖和工具,保留原有启动流程:

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

# 安装Python依赖
COPY requirements.txt ${LAMBDA_TASK_ROOT}
RUN pip install -r requirements.txt --target "${LAMBDA_TASK_ROOT}"

# 安装gossamer3到全局可执行路径(别放/tmp)
RUN curl -o /usr/local/bin/gossamer3 https://xxx/path/to/gossamer3 \
    && chmod +x /usr/local/bin/gossamer3

# 把Lambda代码放到任务根目录
COPY app.py ${LAMBDA_TASK_ROOT}

# 只设置CMD指向你的处理函数,保留原ENTRYPOINT
CMD ["app.lambda_handler"]

2. 修正gossamer3的安装配置

  • 别把gossamer3丢到/tmp,Lambda启动时/tmp是临时挂载目录,权限和路径都不稳定,优先选/usr/local/bin这类全局可执行路径。
  • 必须给gossamer3加执行权限:chmod +x /usr/local/bin/gossamer3,不然就算路径对了也跑不起来。

3. 别乱改Workdir

Lambda默认工作目录是${LAMBDA_TASK_ROOT}(也就是/var/task),改成/tmp会导致运行时找不到你的代码和依赖。要么保持默认,要么明确设置为${LAMBDA_TASK_ROOT}。

4. 重置Lambda控制台的ENTRYPOINT/CMD配置

如果之前在控制台手动覆盖过ENTRYPOINT/CMD,赶紧改回来:

  • ENTRYPOINT用基础镜像默认值(一般是/lambda-entrypoint.sh)
  • CMD设成你的Lambda处理函数,格式是["module_name.function_name"]

本地验证步骤

先在本地测试镜像是否正常,避免反复部署踩坑:

  1. 构建镜像后启动容器:
docker run -p 9000:8080 your-image-tag
  1. 发送测试请求:
curl -XPOST "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{}'

如果本地能正常返回响应,说明镜像配置没问题,再部署到Lambda测试就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 11:10:02