Ошибка с pipenv в Dockerfile: нет такой опции: --requirements Вы имели в виду --quiet?

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

#Pull a image
ARG BASE_IMAGE=python:3.9.0-slim-buster

FROM ${BASE_IMAGE} AS requirements-image

# set working directory
WORKDIR /usr/src/app

# set environment varibles
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# install system dependencies
RUN apt-get update \
    && apt-get upgrade -y \
    && apt-get -y install netcat gcc cron \
    && apt-get clean

# install python dependencies
RUN pip install --upgrade pip
RUN pip install pipenv pytest
COPY Pipfile* ./
RUN pipenv lock -r --dev > requirements.txt

# add app
FROM ${BASE_IMAGE} AS compile-image
WORKDIR /usr/src/app
COPY --from=requirements-image /usr/src/app/requirements.txt /usr/src/app/requirements.txt

# set environment varibles
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# install system dependencies
RUN apt-get update \
   ...continue

RUN python3 -m venv /home/venv
ENV PATH = "/home/venv/bin:$PATH"
RUN update-alternatives --install /usr/bin/python python /usr/bin/python3 1 \
    && update-alternatives --install /usr/local/bin/pip pip /usr/local/bin/pip3 1

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


FROM ${BASE_IMAGE} AS runtime-image
ENV PYTHONUNBUFFERED TRUE
COPY --from=compile-image /home/venv /home/venv
ENV PATH = "/home/venv/bin:$PATH"

WORKDIR /usr/src/app

EXPOSE 80
COPY . .

Однако я получаю следующую ошибку:

=> ERROR [requirements-image 7/7] RUN pipenv lock --requirements > requirements  3.0s
------
 > [requirements-image 7/7] RUN pipenv lock --requirements > requirements.txt:
#0 1.588 Usage: pipenv lock [OPTIONS]
#0 1.588 Try 'pipenv lock -h' for help.
#0 1.588 
#0 1.588 Error: No such option: --requirements Did you mean --quiet?
------
Dockerfile:23
--------------------
  21 |     RUN pip install pipenv pytest
  22 |     COPY Pipfile* ./
  23 | >>> RUN pipenv lock --requirements > requirements.txt
  24 |     
  25 |     # add app
--------------------
ERROR: failed to solve: process "/bin/sh -c pipenv lock --requirements > requirements.txt" did not complete successfully: exit code: 2

Я пытался изменить строку 23 Dockerfile разными командами, но это не работает, как правильно? Примечание. Я вырезал часть файла Dockerfile, чтобы не удлинять код, строка 23, вызывающая проблемы:

RUN pipenv lock -r --dev > requirements.txt
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
0
0
94
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема с -r описана в этом ответе. -r устарел, и вы должны использовать requirements в обмен следующим образом:

pipenv requirements --dev > dev-requirements.txt

Я внес указанные вами изменения и получаю сообщение об ошибке: #0 2.108 FileNotFoundError: [Errno 2] Нет такого файла или каталога: '/usr/src/app/Pipfile.lock' Как вы думаете, что происходит? в строке 22 я копирую файл, верно?

Diego L 20.04.2023 18:36

Вы не туда копируете. Во время копирования вы находитесь в корне файловой системы, но когда вы хотите получить к ней доступ, вы находитесь в /usr/src/app/. Вам нужно либо установить свой рабочий каталог раньше, либо настроить местоположение копии в строке 22.

Rick Rackow 20.04.2023 18:41

вы правы, я проглядел. большое спасибо.

Diego L 20.04.2023 20:12

Другие вопросы по теме