Docker-compose (и django): Не удается получить переменные окружения для сервисов

Я пытаюсь написать небольшое решение для развертывания с помощью docker(-compose) для небольшого Django приложения.

В настоящее время файл django-compose с именем docker-compose.dev.yaml выглядит примерно так:

version: "3"

services:
  backend:
    build:
      context: ./backend
      dockerfile: Dockerfile
    command: python manage.py runserver 0.0.0.0:8000
    ports:
      - 8000:8000
    env_file:
      - dev.env

Файл dev.env выглядит следующим образом:

DEBUG=1
SECRET_KEY=We9ZyuSKsP9Mgvsrt74gExF8baWbGL # not important that this leaks
DJANGO_ALLOWED_HOSTS=localhost

Однако, когда django пытается запуститься, я получаю следующее:

#11 0.634 ALLOWED_HOSTS = os.environ.get("DJANGO_ALLOWED_HOSTS").split(" ")

#11 0.634 AttributeError: объект 'NoneType' не имеет атрибута 'split'

В основном, переменная окружения возвращает None, то есть переменные не попадают в контейнер.

Я пытался, согласно документации, сделать следующее:

    # ...
    environment:
      - DEBUG
      - SECRET_KEY
      - DJANGO_ALLOWED_HOSTS

Безрезультатно.

Есть идеи? Репозиторий за кодом является публичным, я приглашаю вас попробовать.

Моей текущей тестовой средой является рабочий стол Docker на Windows 10.

Итак, я понял это.

Оказалось, что эта строка в Dockerfile для бэкенда:

RUN python manage.py migrate

Вот в чем была проблема. Я не понял, что он запускается во время сборки, а не во время выполнения, поэтому переменные окружения не были доступны.

Я перешел на скрипт, вызываемый во время выполнения, и не все работает!

backend/Dockerfile:

# ...
# Make files executable
RUN chmod +x start.dev.sh

backend/start.dev.sh:

#!/bin/bash
python manage.py migrate
python manage.py runserver 0.0.0.0:8000

И ./docker-compose.dev.yaml:

# ...
    command: ./start.dev.sh
# ...
Вернуться на верх