Django在Docker中加载错误的设置模块

时间:2018-11-23 23:07:31

标签: django database gunicorn

我将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"]

1 个答案:

答案 0 :(得分:1)

gunicorn可能被守护,并且可能没有按照您期望的方式继承docker env变量。幸运的是,gunicorn确实可以使用-e标志为其工作人员指定env值。因此,您只需将以下两个参数添加到CMD数组中,它应该可以工作:

  1. -e
  2. 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"]