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

时间:2019-08-03 20:19:48

标签: 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

1 个答案:

答案 0 :(得分:0)

从构建的映像中获取文件的最简单方法可能是将卷挂载到容器上,并使主容器进程只是一个cp命令:

docker run \
  --rm \
  -v $PWD:/export \
  fbprophet \
  cp lambdatest.zip /export

(如果您构建的应用程序使用ENTRYPOINT ["python"]或类似的名称,则需要在图像名称前指定--entrypoint /bin/cp ,然后将参数在图片名称之后。使用CMD可以避免这种麻烦。)

通常,Docker映像具有一个打包的应用程序(或者可以在其基础上构建一个合理的应用程序),并且运行容器实际上可以运行该应用程序。图像是仅传递文件的一种不便方式。您可能会发现,在主机上的Docker外部运行相同的命令集以创建虚拟环境更加容易和安全,并且完成后,您可以直接cp从那里移出文件。