【问题标题】:Exporting zipped file from docker container从 docker 容器中导出压缩文件
【发布时间】:2021-05-28 13:52:31
【问题描述】:

我正在尝试使用 Pillow 包运行 aws lambda 函数,但出现导入错误。这个错误就像一个标准错误(herehere)。 我从这些线程中了解到的是:要解决问题,我应该在 docker 容器中运行包安装,然后将其用作 lambda 函数的 zip 包。

以下是我的 docker 文件:

FROM lambci/lambda:python3.6

USER root

ENV APP_DIR /var/task

WORKDIR $APP_DIR

COPY requirements.txt .
COPY bin ./bin
COPY lib ./lib

RUN mkdir -p $APP_DIR/lib
RUN pip3 install -r requirements.txt -t /var/task/lib

(我使用lambci/lambda:python3.6在本地模拟python lambda环境,本地lambda函数运行良好)。

我的问题是:一旦我运行docker-build 命令,我可以看到正在构建的图像,但我似乎无法找到一种方法来压缩安装的包和依赖项(在 lib 和 bin 中)并使用它zip 文件上传到 s3。

以下是我的docker-compose 文件:

version: '3'

services:
  lambda:
    build: .
    environment:
      - PYTHONPATH=/var/task/src:/var/task/lib
      - PATH=/var/task/bin
    volumes:
      - ./src/:/var/task/src/

【问题讨论】:

  • 从镜像启动一个容器。这些文件将在其中可用。您还可以通过挂载卷将它们复制到您的主机。

标签: python amazon-web-services docker aws-lambda docker-compose


【解决方案1】:

根据我的经验,向 lambda 函数添​​加依赖项的最简单方法是通过 lambda layers。该层可以使用AWS blog中描述的docker创建。

因此,您可以将pillow 添加到您的函数中,如下所示:

  1. 创建空文件夹,例如mylayer。该层如果完全独立于您的项目,因此可以在任何位置创建它,例如在/tmp

  2. 进入文件夹,创建requirements.txt文件,内容为pillow

echo pillow > ./requirements.txt
  1. 运行以下 docker 命令:

该命令将为python3.6创建层:

docker run -v "$PWD":/var/task "lambci/lambda:build-python3.6" /bin/sh -c "pip install -r requirements.txt -t python/lib/python3.6/site-packages/; exit"
  1. 将图层存档为 zip:
zip -9 -r mylayer.zip python 
  1. 在 AWS 控制台中基于 mylayer.zip 创建 lambda 层。不要忘记将Compatible runtime 指定为python3.6

  2. 将第 5 步中创建的层添加到您的函数中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-11
    • 1970-01-01
    • 2020-04-15
    • 2015-12-16
    • 2016-11-26
    • 2014-10-06
    相关资源
    最近更新 更多