【问题标题】:Installing python package from source in Dockerfile在 Dockerfile 中从源代码安装 python 包
【发布时间】:2019-08-25 10:36:21
【问题描述】:

我目前正在使用 docker-compose 来使用 Celery 的一个实例,它是一个 python 队列管理器。但是,当我扩展我的代码时,我希望能够使用 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 和此处提到的其余命令:https://developers.google.com/optimization/install/python/source_linux 添加到 Dockerfile 中不起作用。它说 git 不是命令,但如果我尝试使用 RUN sudo apt install git 安装它,它会告诉我 sudo 不是命令。

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

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

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

DOCKERFILE:

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 

码头工人组成:

version: '3'

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

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

要求:

celery
redis
requests

【问题讨论】:

    标签: python docker docker-compose dockerfile


    【解决方案1】:

    您已经非常接近它了,可以在同一执行中从其他图像中获取依赖关系。
    试试下面的 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
    

    【讨论】:

      【解决方案2】:

      它说 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。在此处阅读有关高山图像的更多信息:https://hub.docker.com/_/alpine

      使用 RUN apk add git 而不使用 sudo:

      FROM python:3.6-alpine
      RUN apk add git
      ...
      

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

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

      【讨论】:

        猜你喜欢
        • 2013-06-04
        • 1970-01-01
        • 2017-05-25
        • 1970-01-01
        • 2010-12-01
        相关资源
        最近更新 更多