gunicorn не найден при запуске док-контейнера с venv

Я пытаюсь запустить контейнер Docker, который жалуется на сообщение об ошибке: /bin/sh: gunicorn: not found. Локальный запуск сервера без Docker работает нормально. И построение образа тоже отлично работает. Я новичок в докере, поэтому я не знаю, выглядит ли что-то странным в моем файле Docker.

Мой докерфайл:

FROM python:3.7-alpine

RUN adduser -D teamreacher
WORKDIR /home/teamreacher

# copy and install dependencies
COPY ./requirements.txt requirements.txt
RUN python -m venv venv
RUN venv/bin/pip install --upgrade pip
RUN venv/bin/pip install -r requirements.txt

# copy the app
COPY . .
RUN chmod +x boot.sh

RUN chown -R teamreacher:teamreacher ./
USER teamreacher

# expose port and run server
EXPOSE 5000

RUN source venv/bin/activate
CMD gunicorn -b :5000 --access-logfile - --error-logfile - wsgi:app

И мои требования.txt:

Flask==1.0.2
Flask-RESTful==0.3.6
Flask-SQLAlchemy==2.3.2
Flask-JWT==0.3.2
Flask-Cors==3.0.7
gunicorn==19.9.0

person Weblurk    schedule 13.12.2018    source источник
comment
Просто попробуйте заменить последние две строки вашего Dockerfile следующей строкой: RUN venv/bin/gunicorn -b :5000 --access-logfile - --error-logfile - wsgi:app   -  person Nazarii Plebanskii    schedule 13.12.2018


Ответы (1)


Команда RUN создает слой, это похоже на запуск команды в новой оболочке. Когда он завершается, «оболочка» выходит. Таким образом, любые следующие команды не будут затронуты.

Вы можете добавить сценарий оболочки (startup.sh), например,

#!/bin/sh
source venv/bin/activate
gunicorn -b :5000 --access-logfile - --error-logfile - wsgi:app

затем CMD ["./startup.sh"]

PS:

Мало интереса к использованию виртуальной среды в контейнере докеров. Контейнер — это уже изолированная среда, и он должен делать только одну вещь.

person Siyu    schedule 13.12.2018
comment
Это решило это, даже если я точно не понимаю, почему. Кроме того, вы абсолютно правы в том, что виртуальная среда не нужна в докере. Мне это не приходило в голову, так как я так привык всегда venv в своих приложениях для фляг. - person Weblurk; 13.12.2018
comment
@Weblurk Я обновил объяснение, поможет ли оно вам лучше понять проблему? - person Siyu; 13.12.2018