Docker创建|守护程序的错误响应:未指定命令



附加了我的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完成后的文件。

最新更新