【问题标题】:Multi-stage Dockerfile not working for python多阶段 Dockerfile 不适用于 python
【发布时间】:2020-01-14 09:25:07
【问题描述】:

目前我正在第一阶段创建一个虚拟环境。 运行命令pip install -r requirements.txt,在/venv/bin dir中安装可执行文件。

在第二阶段,我正在复制 /venv/bin dir ,但在运行 python 应用程序时出现错误,因为找不到模块,即我需要再次运行 pip install -r requirements.txt 才能运行该应用程序。 该应用程序在 python 2.7 中运行,一些依赖项需要编译器来构建。此外,这些依赖项在 alpine 图像编译器中失败,并且仅适用于 ubuntu 编译器或 python:2.7 官方图像(而后者又使用 debian)

我是否在第二阶段遗漏了一些有助于使用复制的依赖项而不是再次安装它的命令。

FROM python:2.7-slim AS build
RUN apt-get update &&apt-get install -y --no-install-recommends build-essential gcc
RUN pip install --upgrade pip
RUN python3 -m venv /venv
COPY ./requirements.txt /project/requirements/
RUN /venv/bin/pip install -r /project/requirements/requirements.txt
COPY . /venv/bin

FROM python:2.7-slim AS release
COPY --from=build /venv /venv
WORKDIR /venv/bin
RUN apt-get update && apt-get install -y --no-install-recommends build-essential gcc
#RUN pip install -r requirements.txt //
RUN cp settings.py.sample settings.py
CMD ["/venv/bin/python3", "-m", "main.py"]

我试图在第二阶段避免pip install -r requirements.txt 以减小当前没有发生的图像大小。

【问题讨论】:

  • 请包含您正在运行的命令及其输出。
  • 在我的 Python 图像中,我通常采用相同的方法,但我没有使用 virtualenv 中二进制文件的完整路径,而是修改了PATH。检查该方法是否适合您:github.com/eez0/docker-samples/blob/master/Dockerfile_python
  • 谢谢,我尝试运行你的 dockerfile 但在第二张图片中没有安装任何模块。为了调试我进入图像 python main.py 的问题,所以没有模块存在。我不得不在第二张图片中再次执行 pip install -r requirements.txt 。
  • 你还能说出你的图片尺寸一般是多少吗?
  • 只复制bin 目录是不够的;例如,软件包安装在lib/pythonX.X/site-packagesinclude 下的标头。

标签: python python-2.7 docker dockerfile docker-multi-stage-build


【解决方案1】:

仅复制bin 目录是不够的;例如,软件包安装在lib/pythonX.X/site-packagesinclude 下的标头。我只是复制整个 venv 目录。您也可以使用--no-cache-dir 运行它,以避免保存车轮档案。

【讨论】:

    【解决方案2】:

    全部插入

    FROM yourimage:tag AS build
    

    【讨论】:

    • 这是错字,我确实是这样做的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-14
    • 1970-01-01
    相关资源
    最近更新 更多