Slim Docker Image содержит репозиторий git - PullRequest
0 голосов
/ 16 января 2019

У меня есть файл require.txt, который содержит следующий пакет:

git+https://username:password@gitlab.mycompany.com/mypackage.git@master#egg=mypackage

Я могу создать свой образ докера, используя базовый файл докера. Тем не менее, я пытаюсь использовать более сложный файл докера, чтобы сделать мое изображение докера максимально тонким:

FROM python:3.7-alpine as base
COPY . /app
WORKDIR /app

FROM base AS dependencies
COPY requirements.txt ./
RUN apk add --no-cache make automake gcc g++ git  && \
    pip install -r requirements.txt

FROM base
WORKDIR /app
COPY . /app
COPY --from=dependencies /root/.cache /root/.cache
COPY requirements.txt ./
RUN pip install -r requirements.txt && rm -rf /root/.cache
EXPOSE 8000
CMD python main.py

Проблема в том, что на последнем этапе сборки я получаю сообщение об ошибке, которое «git» не может быть найдено, т. Е. Сборка пытается извлечь «mypackage» вместо того, чтобы извлекать его из части «зависимости». Есть идеи как это исправить?

Ошибка:

 Error [Errno 2] No such file or directory: 'git': 'git' while executing command git clone -q     Cannot find command 'git' - do you have 'git' installed and in your PATH?

1 Ответ

0 голосов
/ 16 января 2019

У вас нет git в вашем последнем (третьем) изображении, потому что у вас есть только git в dependencies, в то время как последнее происходит от base, который является чистым альпийским питоном.

Поэтому, когда вы пытаетесь RUN pip install -r requirements.txt && rm -rf /root/.cache, вы не выполняете требования по протоколу git.

Если вам нужно, чтобы ваше окончательное изображение было тонким, есть несколько вариантов, как его исправить:

  • use venv (виртуальная среда Python);создайте его на 2-м шаге и COPY до последнего.Тогда нет необходимости устанавливать требования.

  • загрузить запросы из репозитория на локальный диск на 2-м шаге, затем COPY их на 3-й шаг и установить (может потребоваться gcc на 3-м шаге, но не git)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...