Dockerfile - активировать Python virtualvenv - ubuntu
Я пытаюсь создать образ Docker, содержащий веб-сервер Apache с Django. Я использую виртуальные среды в своей производственной среде и не знаю, как активировать их в Dockerfile.
Это мой Dockerfile:
FROM ubuntu/apache
ARG GITLAB_USERNAME
ARG GITLAB_TOKEN
RUN apt-get update
RUN apt-get upgrade -y
RUN apt-get install -y python3 python3-pip apache2 libapache2-mod-wsgi-py3 libpq-dev git
RUN pip3 install virtualenv
RUN mkdir -p /var/www
WORKDIR "/var/www"
RUN git clone https://${GITLAB_USERNAME}:${GITLAB_TOKEN}@gitlab.com/g5362/gnsave.git
RUN mv gnsave/Netto\ umgeschrieben/ ./GNSave
RUN rm -r gnsave
WORKDIR "/GNSave/"
RUN virtualenv gnsave
RUN source gnsave/bin/activate && pip install -r requirements.txt
RUN a2enmod wsgi
RUN chown -R www-data:www-data /var/www/GNSave
RUN chmod -R u+w /var/www/GNSave
RUN chmod -R 775 /var/www/GNSave/assets
COPY django.conf /etc/apache2/sites-available/django.conf
RUN a2dissite 000-default
RUN a2ensite django
RUN /etc/init.d/apache2 restart
Сообщение об ошибке, которое я получаю, следующее:
/bin/sh: 1: source: not found
Мой вопрос в том, должен ли я разделить django и apache на два докера и скомпоновать их или есть обходной путь для активации venvs в моем Dockerfile.
Заранее спасибо!
Чтобы объяснить ваше сообщение об ошибке, это потому, что по умолчанию Docker запускает эти команды с /bin/sh. source - это команда Bash. У вас есть два варианта:
- Укажите использование Bash в качестве оболочки для выполнения этих команд, добавив
SHELL ["/bin/bash", "-c"]перед командами RUN .
- Используйте оператор dot:
RUN . gnsave/bin/activate && pip install -r requirements.txt