附在那是我的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但是,我总是在这里收到这个错误:
来自守护进程的错误响应:未指定命令
在这里运行这些命令时,它可以工作。我必须在不同的shell中运行它,这样在完成导出之前容器就不会停止运行。
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发布于 2019-08-03 21:13:09
从您构建的映像中获取文件的最简单方法可能是将卷挂载到容器上,并使主容器进程成为cp命令:
docker run \
--rm \
-v $PWD:/export \
fbprophet \
cp lambdatest.zip /export(如果您已经构建了一个使用ENTRYPOINT ["python"]之类的应用程序,则需要在图像名称之前指定--entrypoint /bin/cp,然后将参数放在图像名称之后。使用CMD可以避免这种复杂的情况。)
通常,Docker映像有一个打包的应用程序(或者一个合理的基础应用程序可以在其上构建应用程序),而运行容器实际上运行了该应用程序。图像是传递文件的一种不方便的方式。您可能会发现在您的主机上运行同一组命令在Docker之外创建虚拟环境是更容易和更安全的,并且您可以在完成之后直接将文件从其中cp出来。
https://stackoverflow.com/questions/57341815
复制相似问题