django Docker在创建图像时采用错误的设置文件

x0fgdtte  于 2023-02-05  发布在  Go
关注(0)|答案(1)|浏览(96)

我有一个Django应用程序,我的设置被放在名为settings的文件夹中。在这个文件夹中,我有init. py,www.example.com,www.example.com和production.py。 base.py , deployment.py and production.py.
我的www.example.com是这样的:wsgi.py looks like this:

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myapp_settings.settings.production")

application = get_wsgi_application()

我的停靠文件:

FROM python:3.8

ENV PYTHONUNBUFFERED 1
ENV PYTHONDONTWRITEBYTECODE 1

RUN mkdir /code
COPY . /code/
WORKDIR /code

RUN pip install --no-cache-dir git+https://github.com/ByteInternet/pip-install-privates.git@master#egg=pip-install-privates

RUN pip install --upgrade pip

RUN pip_install_privates --token {GITHUB-TOKEN} /code/requirements.txt

RUN playwright install --with-deps chromium
RUN playwright install-deps

RUN touch /code/logs/celery.log
RUN chmod +x /code/logs/celery.log

EXPOSE 80

我的Dock合成文件:

version: '3'

services:
  app:
    container_name: myapp_django_app
    build:
      context: ./backend
      dockerfile: Dockerfile
    restart: always
    command: gunicorn myapp_settings.wsgi:application --bind 0.0.0.0:80
    networks:
      - myapp_default
    ports:
      - "80:80"
    env_file:
      - ./.env
    • 问题**

每次我创建映像时,Docker都从www.example.com而不是production.py获取设置。我尝试使用以下命令更改我的设置:development.py instead of production.py. I tried to change my setting using this command:

set DJANGO_SETTINGS_MODULE=myapp_settings.settings.production

它在使用conda/venv时工作正常,我能够切换到生产模式,但在创建Docker映像时,它根本不考虑www.example.com文件。production.py file at all.

    • 问题**

还有什么我应该注意的,导致这样的问题,我该如何解决它?

w6lpcovy

w6lpcovy1#

是的,您还需要检查其他内容:
当你运行你的docker容器时,你可以指定环境变量。如果你声明了环境变量DJANGO_SETTINGS_MODULE=myapp_settings.development,它将覆盖你在www.example.com中指定的内容wsgi.py!

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myapp_settings.settings.production")

以上代码的基本含义是:将"myapp_settings.settings.production"声明为默认值如果声明了环境变量DJANGO_SETTINGS_MODULE,则采用该变量的值。

编辑1

也许您可以尝试在您的docker-compose文件中指定环境变量:

version: '3'

services:
  app:
    environment:
      - DJANGO_SETTINGS_MODULE=myapp_settings.settings.production
    container_name: myapp_django_app
    build:
      context: ./backend
      dockerfile: Dockerfile
    restart: always
    command: gunicorn myapp_settings.wsgi:application --bind 0.0.0.0:80
    networks:
      - myapp_default
    ports:
      - "80:80"
    env_file:
      - ./.env

相关问题