0

我是 docker 的菜鸟,我正在尝试为 python3 构建一个多级 dockerfile

FROM ubuntu:18.04 as base
RUN apt-get -qy update && apt-get install python3 -y
WORKDIR /pydocktest
COPY test.py .

FROM  ubuntu:18.04 AS release
WORKDIR /pytest
COPY --from=base /usr/local/bin/ /usr/local/bin/
COPY --from=base /pydocktest .
CMD ["./test.py"]

然后

docker build -t test .
docker run test

输出

standard_init_linux.go:211: exec user process caused "no such file or directory"

但是当我apt -get install python3release零件中运行时,它可以完美运行吗?那么,如果我要重新安装python,为什么需要多阶段对不起,如果我听起来转储

4

1 回答 1

0

简短的回答:如果您在最终映像中重新安装 Python,则不需要多阶段。

长答案:使用多阶段的一个原因是您在构建应用程序时需要特殊的应用程序和文件,但在运行时不需要它们。在您的示例中,情况并非如此。

作为一个建议,您可以使用 python3 图像而不是自己安装它。这将简化您的 Dockerfile:

FROM python:3
COPY test.py .
CMD [ "python", "./test.py" ]

如果你想了解更多关于多阶段 Dockerfiles 背后的基本原理,我的Learn Docker book 解释了它们,顺便说一句,这是一本为新手写的书。

于 2020-02-19T13:19:16.490 回答