Dockerfile - 激活 Python virtualenv - ubuntu

Dockerfile - activate Python virtualvenv - ubuntu

我正在尝试创建一个 Docker 图像,其中包含带有 Django 的 Apache Web 服务器。我在我的生产环境中使用虚拟环境,但我不知道如何在 Docker 文件中激活它。

这是我的Docker文件:

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 分成两个 docker 并组合它们,或者我的 Docker 文件中是否有激活 venvs 的解决方法。

提前致谢!

解释一下您的错误消息,这是因为默认情况下,Docker 运行 使用 /bin/sh 发送这些命令。 source 是一个 Bash 命令。您有两个选择:

  1. 通过在 运行 命令前添加 SHELL ["/bin/bash", "-c"] 来指定使用 Bash 作为 shell 到 运行 这些命令
  2. 使用点运算符:RUN . gnsave/bin/activate && pip install -r requirements.txt