AWS Lambda Docker容器- fork/exec没有这样的文件或目录

8oomwypt  于 2023-11-17  发布在  Docker
关注(0)|答案(1)|浏览(115)

我尝试使用AWS控制台在AWS Lambda中运行Docker容器。使用的架构是x86_64,Docker容器运行基于Python的处理程序函数。容器中的Python脚本backup_manager.py包含两个函数,一个名为get_parameter的助手,它从AWS参数存储中提取参数,另一个名为handler,它在事件上执行代码(handler使用get_parameter函数)。
这是我的Dockerfile:

# install Ubuntu 20.04
FROM ubuntu:20.04

# update Ubuntu packages
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get clean
RUN apt-get -y update
RUN apt upgrade -y
RUN apt install -y apt-utils \ 
           build-essential \
           curl \
           libffi-dev \ 
           libssl-dev \ 
           libxml2-dev \ 
           libxslt1-dev \
           unzip \
           wget \
           zlib1g-dev 

# install Python 3.11
RUN apt-get install -y software-properties-common gcc && \
    add-apt-repository -y ppa:deadsnakes/ppa
RUN apt-get update && apt-get install -y python3.11 python3.11-dev python3.11-distutils python3-pip python3-apt python3.11-venv
 
# make symlink (overriding default Python3.8 installed with Ubuntu)
RUN rm /usr/bin/python3
RUN ln -s /usr/bin/python3.11 /usr/bin/python3

# create a virtual environment 
ENV VIRTUAL_ENV=/opt/venv
RUN python3.11 -m venv $VIRTUAL_ENV
ENV PATH="$VIRTUAL_ENV/bin:$PATH"

# upgrade pip
RUN python3.11 -m pip install --upgrade pip

# copy files
ARG output_path=${LAMBDA_TASK_ROOT}/mongodb_backups
RUN mkdir $output_path
COPY requirements.txt *.yml $output_path/

# install Python packages
RUN pip3 install -r $output_path/requirements.txt

# download MongoDB Database Tools (architecture x86_64)
ARG archive=mongodb-database-tools-amazon2-x86_64-100.9.1
RUN wget -P ${LAMBDA_TASK_ROOT}/ https://fastdl.mongodb.org/tools/db/"${archive}.tgz"
RUN tar -zxvf ${LAMBDA_TASK_ROOT}/"${archive}.tgz"

# make the DB Tools available in PATH
RUN cp ${LAMBDA_TASK_ROOT}/$archive/bin/* ${LAMBDA_TASK_ROOT}/usr/local/bin/

# run main Python script
CMD ["${output_path}/backup_manager.handler"]

字符串
当我在控制台中单击“测试”时,在部署映像后,我得到以下错误:

Error: fork/exec ${output_path}/backup_manager.handler: no such file or directory


这个错误是不言自明的,但我在本地运行镜像时仔细检查了路径,似乎我在调用CMD命令时使用的是正确的路径。我已经在线检查了有类似问题的人,但只有少数人,我无法修复这个问题。

dkqlctbz

dkqlctbz1#

所以,我一直在寻找解决方案。我的Dockerfile有两个直接的问题:
1.我忘了把backup_manager.py脚本复制到图像上。
1.使用ARG创建的变量不应在CMD命令中使用。
也就是说,我仍然遇到了路径问题,我怀疑这与变量LAMBDA_TASK_ROOT有关,该变量可能只有在使用公共AWS映像时才会创建。我已经通过使用公共Lambda AWS Image for Python 3.11成功地使我的Dockerfile在AWS Lambda中工作。

# install Python 3.11 AWS Lambda image
FROM public.ecr.aws/lambda/python:3.11

# install Ubuntu packages
RUN yum install -y wget tar.x86_64 gzip

# copy files
COPY requirements.txt *.yml backup_manager.py ${LAMBDA_TASK_ROOT}/

# install Python packages
RUN pip3 install -r ${LAMBDA_TASK_ROOT}/requirements.txt

# download MongoDB Database Tools (architecture x86_64)
ARG archive=mongodb-database-tools-amazon2-x86_64-100.9.1
RUN wget -P ${LAMBDA_TASK_ROOT}/ https://fastdl.mongodb.org/tools/db/"${archive}.tgz"
RUN tar -zxvf "${LAMBDA_TASK_ROOT}"/"${archive}.tgz"

# make the DB Tools available in PATH
RUN cp ${LAMBDA_TASK_ROOT}/$archive/bin/* /usr/local/bin/

# run Lambda function
CMD ["backup_manager.handler"]

字符串

相关问题