Estoy tratando de escribir una pequeña solución de implementación de docker (-compose) para una pequeña aplicación Django.
Actualmente, el archivo django-compose, denominado docker-compose.dev.yaml se parece a esto:
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 El archivo dev.env se ve así:
DEBUG=1 SECRET_KEY=We9ZyuSKsP9Mgvsrt74gExF8baWbGL # not important that this leaks DJANGO_ALLOWED_HOSTS=localhostSin embargo, cuando Django intenta iniciarse, obtengo lo siguiente:
#11 0.634 PERMITIDOS_HOSTS = os.environ.get("DJANGO_ALLOWED_HOSTS").split(" ")
#11 0.634 AttributeError: el objeto 'NoneType' no tiene el atributo 'split'
Básicamente, la variable de entorno devuelve None , lo que significa que las variables no llegan al contenedor.
Intenté, de acuerdo con los documentos , hacer esto:
# ... environment: - DEBUG - SECRET_KEY - DJANGO_ALLOWED_HOSTSSin suerte.
¿Algunas ideas? El repositorio detrás del código es público, te invito a probar.
Mi entorno de prueba actual es el escritorio Docker en Windows 10.
Entonces, lo descubrí.
Resulta que esta línea en el Dockerfile para el backend:
RUN python manage.py migrateera el problema. No me di cuenta de que se ejecutó en tiempo de compilación, no en tiempo de ejecución, por lo que las variables de entorno no estaban disponibles.
¡Me mudé a un script llamado en tiempo de ejecución y no todo funciona!
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 Y ./docker-compose.dev.yaml :
# ... command: ./start.dev.sh # ...