我将Django应用程序配置为在基本设置文件中使用sqlite,并覆盖了生产和开发设置文件中的设置。
我在Dockerfile中将DJANGO_SETTINGS_MODULE设置为正确的值。
但是,当我运行它时,它使用基本设置文件中定义的sqlite。如果我将其注释掉,则会抱怨没有设置database.ENGINE。
为什么它从base.py设置文件而不是另一个文件中读取数据库配置?我在环境变量中指定另一个,它从那里读取其他设置,但是对于数据库,它从基本文件中读取它。
这种行为让我有些困惑,如果有人可以给我一些指导来解决这个问题,将不胜感激。
如果您需要更多信息,请告诉我。
Dockerfile:
FROM python:3.6
LABEL maintainer xxx@xx.com
ARG requirements=requirements/production.txt
ENV DJANGO_SETTINGS_MODULE=sasite.settings.production_test
WORKDIR /app
COPY manage.py /app/
COPY requirements/ /app/requirements/
RUN pip install -r $requirements
COPY config config
COPY sasite sasite
COPY templates templates
COPY logs logs
COPY scripts scripts
EXPOSE 8001
CMD ["/usr/local/bin/gunicorn", "--config", "config/gunicorn.conf", "--log-config", "config/logging.conf", "-w", "4", "-b", "0.0.0.0:8001", "sasite.wsgi:application"]
答案 0 :(得分:1)
gunicorn可能被守护,并且可能没有按照您期望的方式继承docker env变量。幸运的是,gunicorn确实可以使用-e
标志为其工作人员指定env值。因此,您只需将以下两个参数添加到CMD
数组中,它应该可以工作:
-e
DJANGO_SETTINGS_MODULE=sasite.settings.production_test
CMD ["/usr/local/bin/gunicorn", "--config", "config/gunicorn.conf", "--log-config", "config/logging.conf", "-w", "4", "-b", "0.0.0.0:8001", "-e", "DJANGO_SETTINGS_MODULE=sasite.settings.production_test", "sasite.wsgi:application"]