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

在 Dockerfile 中从源代码安装 python 包

在 Dockerfile 中从源代码安装 python 包

30秒到达战场 2022-05-11 15:23:35
我目前正在使用 docker-compose 来使用一个 python 队列管理器 Celery 的实例。但是,当我扩展我的代码时,我希望能够使用 Google 的 OR-tools 包。但是,如果您使用的是 python-3.6:alpine,则必须从源代码安装 OR-tools(如此处所述:pip install ortools: No matching distribution - Alpine)。我曾尝试使用非高山版本的 python,但后来我遇到了 Celery 的问题,所以我认为从源代码安装是前进的方向。我对使用 Docker 比较陌生,所以我很难做到这一点。只需将RUN git clone -b master https://github.com/google/or-tools此处提到的其余命令添加到 Dockerfile 中:https ://developers.google.com/optimization/install/python/source_linux不起作用。它说 git 不是命令,但如果我尝试使用RUN sudo apt install git它安装它,它会告诉我 sudo 不是命令。我是否需要在我的 dockerfile 中添加另一个部分,例如:FROM: ubuntuRUN git clone -b master https://github.com/google/or-tools如果是这样,这样做的正确方法是什么,并确保它链接到我的 Dockerfile 的另一部分,以便我可以在 python 代码中使用 OR-tools?码头文件:FROM python:3.6-alpineENV CELERY_BROKER_URL redis://redis:6379/0ENV CELERY_RESULT_BACKEND redis://redis:6379/0ENV C_FORCE_ROOT trueWORKDIR /usr/src/appCOPY requirements.txt .RUN pip install --no-cache-dir -r requirements.txtCOPY . .CMD celery -A celeryExample worker --concurrency=1 --loglevel=info 码头工人组成:version: '3'services:  redis:    image: redis    ports:      - 6379:6379  celery:     build:         context: .        dockerfile: Dockerfile.celery    depends_on:      - redis    volumes:         - .:/usr/src/app    要求:celeryredisrequests
查看完整描述

2 回答

?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

您已经非常接近它了,可以在同一执行中从其他图像中获取依赖关系。

尝试以下 Dockerfile:


FROM ubuntu

RUN apt-get update && apt-get install -y git

RUN git clone -b master https://github.com/google/or-tools

FROM python:3.6-alpine

ENV CELERY_BROKER_URL redis://redis:6379/0

ENV CELERY_RESULT_BACKEND redis://redis:6379/0

ENV C_FORCE_ROOT true

WORKDIR /usr/src/app

COPY requirements.txt .

RUN pip install --no-cache-dir -r requirements.txt

COPY . .

CMD celery -A celeryExample worker --concurrency=1 --loglevel=info


查看完整回答
反对 回复 2022-05-11
?
呼唤远方

TA贡献1856条经验 获得超11个赞

它说 git 不是命令,但是如果我尝试使用 RUN sudo apt install git 安装它,它会告诉我 sudo 不是命令。


名为的基础映像python:3.6-alpine公开了用户“root”,这意味着不需要 sudo(您已经是 root)。在 Docker 中,您几乎从不使用 sudo 或使用密码登录,因为这很麻烦,而且 Docker 有其他处理用户的方式,例如USER语法:


FROM python:3.6-alpine

USER root

# All commands will be run as user root

...

USER foo

# All commands will be run as user foo

...

python:3.6-alpine没有apt,而是使用apk。在此处阅读有关 alpine 图像的更多信息:https ://hub.docker.com/_/alpine


不使用RUN apk add gitsudo:


FROM python:3.6-alpine

RUN apk add git

...

这样做的正确方法是什么,并确保它链接到我的 Dockerfile 的另一部分,以便我可以在 python 代码中使用 OR-tools?


我不知道正确的方法是什么,但我会尝试使用您正在使用的基本映像在 Dockerfile 中构建所需的依赖项。


查看完整回答
反对 回复 2022-05-11
  • 2 回答
  • 0 关注
  • 201 浏览
慕课专栏
更多

添加回答

举报

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