python - 多级dockerfile:如何在不使用--user pip3参数的情况下进行安装?

标签 python docker

我是Docker的新手,但我不完全确定为什么会这样。
我尝试编写没有提供给--userpip3参数的dockerfile来安装我的requirements.txt文件,但是由于某些原因,将设置输出从${INSTALL}目录复制到${APP}目录对我不起作用。
如何编写此代码,这样我就不必依赖--user提供的pip3参数了?
现在使用所说的参数是可行的,但这只是让我烦恼的是,我无法做到这一点。
我使用以下命令构建镜像:

docker image build --no-cache -t apptest .
Dockerfile
FROM python:3.8-alpine as base
ENV APP="/app"
ENV INSTALL="/install"
ENV LOC="/root/.local"
ENV LOCBIN="${LOC}/bin"
ENV PATH $PATH:${LOC}:${LOCBIN}

FROM base as builder
WORKDIR ${INSTALL}

COPY ./requirements.txt requirements.txt

#install all dependencies
RUN apk add --no-cache curl python3 pkgconfig python3-dev openssl-dev libffi-dev musl-dev make gcc
RUN pip3 install --user --no-cache-dir -r requirements.txt

FROM base

COPY --from=builder ${LOC} ${LOC}
COPY --from=builder ${LOCBIN} ${LOCBIN}
COPY ./src/ ${APP}
COPY ./src/Cogs/ ${APP}/Cogs
COPY ./src/Documentation/ ${APP}/Documentation
COPY ./src/Models/ ${APP}/Models
COPY ./src/OneNight/ ${APP}/OneNight

WORKDIR ${APP}

#start the service
ENTRYPOINT [ "python3", "service.py" ]

最佳答案

  • 当您安装Python软件包时,代码无处不在。例如。库放入站点程序包,脚本放入bin /等。因此,您需要将所有内容都安装在一个地方以使其易于复制。您的选择基本上是--user或virtualenv,或复制许多不同的目录。参见https://pythonspeed.com/articles/multi-stage-docker-python/
  • 话虽如此,您可能不需要多阶段构建。您在这里想要一个,因为您正在使用编译器。但是您可能只需要编译器,因为您正在使用Alpine Linux。对于普通的Linux发行版,大多数Python软件包在PyPI上都具有二进制预编译的轮子,因此,在很多时候,您根本不需要编译器。

  • 切换到基于Debian的基础镜像(python:3.8-slim-buster)很有可能使您无需编译器即可安装所有内容。参见https://pythonspeed.com/articles/alpine-docker-python/

    关于python - 多级dockerfile:如何在不使用--user pip3参数的情况下进行安装?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64111201/

    相关文章:

    Python - 树遍历问题

    python - 在 Raspberry Pi 3、python 3.4 上运行 Scrapy

    python - 如何使用 "pytest"中另一个文件中的函数和类?

    docker - 部署在Docker容器中的Nginx不会暴露部署在另一个Docker容器中的nuxtjs(502 Bad Gateway)

    spring - 无法使用 IntelliJ 和 docker 调试 Kotlin Tomcat Web 应用程序

    docker - 如何限制docker-compose中的内存使用率?

    python - 如何避免 Python 中的循环导入?

    Python 文本冒险存储数据的麻烦

    docker - 使用 docker 容器安装 redmine 插件

    macos - Mac/OS X 上的/var/lib/docker 在哪里