目标
我很想知道是否可以在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功能来实现这一点。