为了账号安全,请及时绑定邮箱和手机立即绑定

多阶段 dockerfile:如何在没有 --user pip3 参数的情况下安装?

多阶段 dockerfile:如何在没有 --user pip3 参数的情况下安装?

慕娘9325324 2023-09-19 17:18:59
我是码头工人的新手,我不完全确定为什么这是有效的。--user我尝试在不提供pip3安装文件的参数的情况下编写 dockerfile requirements.txt,但由于某种原因,将安装输出从${INSTALL}目录复制到${APP}目录对我来说不起作用。我怎样才能写这个,这样我就不需要依赖--user提供的参数pip3?现在使用上述参数是有效的,但我无法让它做我想做的事情,这真的让我烦恼。我使用以下命令构建图像:docker image build --no-cache -t apptest .DockerfileFROM python:3.8-alpine as baseENV APP="/app"ENV INSTALL="/install"ENV LOC="/root/.local"ENV LOCBIN="${LOC}/bin"ENV PATH $PATH:${LOC}:${LOCBIN}FROM base as builderWORKDIR ${INSTALL}COPY ./requirements.txt requirements.txt#install all dependenciesRUN apk add --no-cache curl python3 pkgconfig python3-dev openssl-dev libffi-dev musl-dev make gccRUN pip3 install --user --no-cache-dir -r requirements.txtFROM baseCOPY --from=builder ${LOC} ${LOC}COPY --from=builder ${LOCBIN} ${LOCBIN}COPY ./src/ ${APP}COPY ./src/Cogs/ ${APP}/CogsCOPY ./src/Documentation/ ${APP}/DocumentationCOPY ./src/Models/ ${APP}/ModelsCOPY ./src/OneNight/ ${APP}/OneNightWORKDIR ${APP}#start the serviceENTRYPOINT [ "python3", "service.py" ]
查看完整描述

1 回答

?
波斯汪

TA贡献1811条经验 获得超4个赞

  1. 当你安装 Python 包时,代码会到处都是。例如,库进入站点包,脚本进入 bin/ 等。因此,您需要将所有内容安装在一处,以便于复制。您的选择--user基本上是虚拟环境,或者复制许多不同的目录。

  2. 话虽如此,您可能不需要多阶段构建。你想要一个在这里,因为你正在使用编译器。但您可能只需要一个编译器,因为您使用的是 Alpine Linux。对于普通的 Linux 发行版,大多数 Python 包在 PyPI 上都有二进制预编译轮,所以很多时候你根本不需要编译器。

切换到基于 Debian 的基础映像 ( python:3.8-slim-buster) 很可能允许您无需编译器即可安装所有内容。


查看完整回答
反对 回复 2023-09-19
  • 1 回答
  • 0 关注
  • 82 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信