首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Dockerfile中从源安装python包

在Dockerfile中从源安装python包
EN

Stack Overflow用户
提问于 2019-08-25 18:36:21
回答 2查看 1.6K关注 0票数 3

我目前正在使用docker-compose来使用Celery的一个实例,一个python队列管理器。然而,当我扩展我的代码时,我希望能够使用Google的OR-tools包。但是,如果您使用的是python-3.6:alpine (这里讨论的是:pip install ortools: No matching distribution - Alpine),则必须从源代码安装OR-tools。我曾尝试使用非高山版本的python,但后来遇到了使用Celery的问题,所以我认为从源码安装才是前进的方向。

我对使用Docker比较陌生,所以我很难做到这一点。简单地将RUN git clone -b master https://github.com/google/or-tools和这里提到的其余命令:https://developers.google.com/optimization/install/python/source_linux添加到Dockerfile是不起作用的。它说git不是一个命令,但是如果我尝试使用RUN sudo apt install git安装它,它告诉我sudo不是一个命令。

我是否需要向dockerfile中添加另一个部分,例如:

代码语言:javascript
复制
FROM: ubuntu
RUN git clone -b master https://github.com/google/or-tools

如果是这样,正确的方法是什么,并确保它链接到Dockerfile的其他部分,这样我就可以在python代码中使用OR-tools了?

文件:

代码语言:javascript
复制
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 

DOCKER-COMPOSE:

代码语言:javascript
复制
version: '3'

services:
  redis:
    image: redis
    ports:
      - 6379:6379

  celery: 
    build: 
        context: .
        dockerfile: Dockerfile.celery
    depends_on:
      - redis
    volumes: 
        - .:/usr/src/app    

要求:

代码语言:javascript
复制
celery
redis
requests
EN

回答 2

Stack Overflow用户

发布于 2019-08-25 19:38:57

你已经非常接近它了,在相同的执行中从其他镜像中获取依赖关系是很好的。

尝试以下Dockerfile:

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2019-08-25 19:54:02

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

名为python:3.6-alpine的基本映像公开了用户“根”,这意味着不需要sudo (您已经是根用户)。在Docker中,你几乎不会使用sudo或登录用户的密码,因为这是一个麻烦,Docker有其他方式与用户打交道,例如USER语法:

代码语言:javascript
复制
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。在这里阅读更多关于阿尔卑斯山的图片:https://hub.docker.com/_/alpine

使用不带sudo的RUN apk add git

代码语言:javascript
复制
FROM python:3.6-alpine
RUN apk add git
...

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57645260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档