附有我的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
答案 0 :(得分:0)
从构建的映像中获取文件的最简单方法可能是将卷挂载到容器上,并使主容器进程只是一个cp
命令:
docker run \
--rm \
-v $PWD:/export \
fbprophet \
cp lambdatest.zip /export
(如果您构建的应用程序使用ENTRYPOINT ["python"]
或类似的名称,则需要在图像名称前指定--entrypoint /bin/cp
,然后将参数在图片名称之后。使用CMD
可以避免这种麻烦。)
通常,Docker映像具有一个打包的应用程序(或者可以在其基础上构建一个合理的应用程序),并且运行容器实际上可以运行该应用程序。图像是仅传递文件的一种不便方式。您可能会发现,在主机上的Docker外部运行相同的命令集以创建虚拟环境更加容易和安全,并且完成后,您可以直接cp
从那里移出文件。