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

基于ECR镜像的Python Lambda函数遇只读文件系统错误的解决步骤

解决Lambda镜像只读文件系统错误的具体步骤

方法一:构建镜像时预先下载NLTK数据(推荐)

Lambda运行环境仅/tmp目录可写,运行时下载NLTK数据会触发只读目录写入错误,预先在构建阶段下载数据可彻底解决问题,还能减少冷启动时间。

  1. 修改Dockerfile,在构建阶段添加NLTK数据下载步骤:
    FROM public.ecr.aws/lambda/python:3.8
    WORKDIR /app
    COPY requirements.txt .
    COPY kbtrial.csv .
    RUN pip3 install -r requirements.txt
    # 预先下载punkt数据到Lambda可读取的目录
    RUN python3 -c "import nltk; nltk.download('punkt', download_dir='/opt/nltk_data')"
    COPY app.py  .
    CMD ["/app/app.handler"]
    
  2. 修改app.py,移除运行时下载代码并指定NLTK数据路径:
    import nltk
    # 设置NLTK读取预先下载的数据
    nltk.data.path.append('/opt/nltk_data')
    from nltk.tokenize import word_tokenize
    
    def handler(event, context):
        # 你的业务逻辑代码
        pass
    
  3. 重新构建并推送镜像到ECR:
    docker build -t lambda-nltk-image .
    docker tag lambda-nltk-image <你的ECR仓库URI>:latest
    docker push <你的ECR仓库URI>:latest
    
  4. 更新Lambda函数使用新镜像,测试运行。

方法二:运行时将数据写入/tmp目录(临时方案)

如果无法修改构建流程,可临时利用Lambda唯一可写的/tmp目录:

  1. 修改app.py中的下载逻辑:
    import nltk
    # 指定下载目录为/tmp下的可写路径
    nltk.download('punkt', download_dir='/tmp/nltk_data')
    nltk.data.path.append('/tmp/nltk_data')
    from nltk.tokenize import word_tokenize
    
    def handler(event, context):
        # 你的业务逻辑代码
        pass
    
  2. 重新构建镜像、推送到ECR并更新Lambda函数。

注意:此方法每次冷启动都会重新下载数据,会增加启动耗时,仅作为临时替代方案。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 15:25:17