附加了我的Dockerfile
。我的目的是使用以下命令:
docker build -t fbprophet . &&
docker create --name=awslambda fbprophet &&
docker cp awslambda:/var/task/venv/lib/python3.7/site-packages/lambdatest.zip .
docker rm awslambda
但是,我总是在这里收到此错误:
守护程序的错误响应:未指定命令
在此处运行这些命令时,它可以正常工作。我必须在不同的外壳中运行它,以便容器在导出之前不会停止运行。
docker build -t fbprophet . && docker container rm awslambda && docker run -it --name=awslambda fbprophet bash
docker cp awslambda:/var/task/venv/lib/python3.7/site-packages/lambdatest.zip .
dockerfile:
FROM lambci/lambda:build-python3.7
ENV VIRTUAL_ENV=/venv
RUN python3 -m venv $VIRTUAL_ENV
ENV PATH="$VIRTUAL_ENV/bin:$PATH"
COPY requirements.txt .
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
WORKDIR /var/task/venv/lib/python3.7/site-packages
COPY lambda_function.py .
COPY .lambdaignore .
RUN echo "Package size: $(du -sh | cut -f1)"
RUN zip -9qr lambdatest.zip *
RUN cat .lambdaignore | xargs zip -9qr /var/task/lambdatest.zip * -x
可能是从构建的图像中获取文件的最简单方法是将卷安装到容器上,并使主要容器过程只需是cp
命令:
docker run
--rm
-v $PWD:/export
fbprophet
cp lambdatest.zip /export
(如果您已经构建了使用ENTRYPOINT ["python"]
或其他类型的应用程序,则需要在图像名称之前指定--entrypoint /bin/cp
,然后在图像之后放置参数名称。使用CMD
避免这种并发症。(
通常,Docker映像具有包装应用程序(或一个合理的基础可以构建应用程序(,并且运行容器实际运行该应用程序。图像是仅通过文件传递的一种不便方式。您可能会发现更容易,更安全地运行主机上Docker之外的同一组命令以创建虚拟环境,并且您可以直接cp
完成后的文件。