在AWS Lambda函数中运行docker命令



目标

我很想知道是否可以在AWS Lambda函数调用中运行docker命令。具体来说,我运行docker compose up -d是为了运行一次性的ECS任务(请参阅aws的这篇文章了解更多信息(。我知道使用AWS CodeBuild很容易实现,但对于我的工作负载持续时间通常低于10秒的用例,使用Lambda会更具成本效益。

AFAIK Docker DooD不可用,因为Lambda函数主机无法切换以将主机的Docker守护进程装载到Lambda函数的容器上。

尝试次数

我尝试了下面的Docker DinD方法,但没有成功:

Lambda自定义容器图像:

ARG FUNCTION_DIR="/function"
FROM python:buster as build-image
ARG FUNCTION_DIR
# Install aws-lambda-cpp build dependencies
RUN apt-get update && 
apt-get install -y 
g++ 
make 
cmake 
unzip 
libcurl4-openssl-dev

RUN mkdir -p ${FUNCTION_DIR}
WORKDIR ${FUNCTION_DIR}
COPY ./* ${FUNCTION_DIR}
RUN pip install --target ${FUNCTION_DIR} -r requirements.txt
FROM python:buster
ARG FUNCTION_DIR
WORKDIR ${FUNCTION_DIR}
COPY --from=build-image ${FUNCTION_DIR} ${FUNCTION_DIR}
ADD https://github.com/aws/aws-lambda-runtime-interface-emulator/releases/latest/download/aws-lambda-rie /usr/bin/aws-lambda-rie
RUN chmod 755 /usr/bin/aws-lambda-rie ./entrypoint.sh ./runner_install_docker.sh
RUN sh ./runner_install_docker.sh
ENTRYPOINT [ "./entrypoint.sh" ]
CMD [ "lambda_function.lambda_handler" ]

runner_install_docker.sh(安装docker的脚本(的内容

#!/bin/bash
apt-get -y update
apt-get install -y 
software-properties-common build-essential 
apt-transport-https ca-certificates gnupg lsb-release curl sudo
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo chmod u+x /usr/bin/*
sudo chmod u+x /usr/local/bin/*
sudo apt-get clean
sudo rm -rf /var/lib/apt/lists/*
sudo rm -rf /tmp/*

当我运行docker compose或其他docker命令时,我会得到以下错误:

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

Docker在AWS Lambda运行时中不可用。即使您将其构建到自定义容器中,Lambda函数也需要作为一个特权docker容器运行,以便docker中的docker工作,这是AWS Lambda不支持的。

具体来说,我正在运行docker compose up-d来运行一次性ECS任务

您需要考虑通过其中一个AWS SDK调用ECS RunTask命令,而不是尝试使用docker compose ECS功能来实现这一点。

最新更新