#python #docker #docker-multi-stage-build
Вопрос:
Я запускаю многоступенчатую сборку докера для своего контейнера python.
На моем первом этапе сборки устанавливаются все зависимости от requirements.txt
################## ## Python Builder Image ################## FROM python:3.10 AS python-builder # create and activate virtual environment # using final folder name to avoid path issues with packages ENV VIRTUAL_ENV="/home/app_user/venv" RUN python3 -m venv $VIRTUAL_ENV ENV PATH="$VIRTUAL_ENV/bin:$PATH" # install requirements COPY requirements.txt . COPY package/ package/ RUN pip3 install --upgrade pip==21.3.1 RUN pip3 install --no-cache-dir -r requirements.txt
requirements.txt содержит команду-e для установки пакета. Когда я создаю свой окончательный образ контейнера, приложение выдает ошибку, в которой говорится, что мой пакет не найден.
################## ## Final Image ################## FROM python:3.10-alpine3.14 as app ENV VIRTUAL_ENV="/home/app_user/venv" ENV PATH="$VIRTUAL_ENV/bin:$PATH" ENV PYTHONDONTWRITEBYTECODE=1 ENV PYTHONUNBUFFERED=1 ENV PIP_DISABLE_PIP_VERSION_CHECK=1 USER app_user WORKDIR /home/app_user/code COPY --from=node-builder /imports /imports COPY main.py config.py ./ COPY scripts/ scripts/ CMD gunicorn main:flask_app --worker-tmp-dir /dev/shm -k uvicorn.workers.UvicornWorker --bind 0.0.0.0:$PORT
Ошибка:
ModuleNotFoundError: No module named 'package'
Есть какие-нибудь идеи?
Ответ №1:
Исправлено путем правильной установки пакета в образе конструктора:
# install requirements COPY requirements.txt . COPY package/ package/ RUN pip3 install --upgrade pip==21.3.1 RUN pip3 install ./package RUN pip3 install --no-cache-dir -r requirements.txt
По сравнению с предыдущим, requirements.txt:
constructs==10.0.9 authlib==0.11 flask==2.0.2 uvicorn[standard]==0.15.0 gunicorn==20.1.0 virtualenv -e package ## didn't like this