我尝试使用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
命令时使用的是正确的路径。我已经在线检查了有类似问题的人,但只有少数人,我无法修复这个问题。
1条答案
按热度按时间dkqlctbz1#
所以,我一直在寻找解决方案。我的Dockerfile有两个直接的问题:
1.我忘了把
backup_manager.py
脚本复制到图像上。1.使用
ARG
创建的变量不应在CMD
命令中使用。也就是说,我仍然遇到了路径问题,我怀疑这与变量
LAMBDA_TASK_ROOT
有关,该变量可能只有在使用公共AWS映像时才会创建。我已经通过使用公共Lambda AWS Image for Python 3.11成功地使我的Dockerfile在AWS Lambda中工作。字符串