Home > Software design >  Migrations doesn't starts for dockerized Django project
Migrations doesn't starts for dockerized Django project

Time:01-20

I've created e simple hello world project with Django and Docker. At the end of Dockerfile there is the command below:

ENTRYPOINT ["/app/web/entrypoint.sh"]

that activate this script:

#!/bin/sh

echo " ---> DB Connection Parameters: \
            DB name: $DB_NAME \
            DB host: $DB_HOST \
            DB port: $DB_PORT"

poetry run python3 website/manage.py migrate --noinput

poetry run python3 website/manage.py collectstatic --noinput

poetry run python3 website/manage.py createsuperuser --noinput

echo " ---> Django Project Port: $PROJECT_PORT"

poetry run python3 website/manage.py runserver 0.0.0.0:"$PROJECT_PORT"

exec "$@"

The project starts but the migration isn't run and I'm forced to log inside the container and use python3 manage.py migrate to start the migration.

Why the migration command doesn't run and collectstatic runs automatically?

Below the docker-compose:

version: '3.7'

services:
  db:
    container_name: dev_db
    image: postgis/postgis
    restart: always
    environment:
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_USER: ${DB_USER}
      POSTGRES_DB: ${DB_NAME}
    volumes:
      - db-data:/var/lib/postgresql/data

  website:
    image: maxdragonheart/${PROJECT_NAME}
    build:
      context: ./web
      dockerfile: Dockerfile
    environment:
      PROJECT_NAME: ${PROJECT_NAME}
      PROJECT_PORT: ${PROJECT_PORT}
      SECRET_KEY: ${SECRET_KEY}
      DB_ENGINE: ${DB_ENGINE}
      DB_NAME: ${DB_NAME}
      DB_USER: ${DB_USER}
      DB_PASSWORD: ${DB_PASSWORD}
      DB_PORT: ${DB_PORT}
      DB_HOST: ${DB_HOST}
      DEBUG: ${DEBUG}
      ALLOWED_HOSTS: ${ALLOWED_HOSTS}
    container_name: dev_website
    restart: always
    ports:
      - ${PROJECT_PORT}:${PROJECT_PORT}
    volumes:
      - website-static-folder:/app/web/static-folder
      - website-media-folder:/app/web/media-folder
      - logs:/app/logs
    depends_on:
      - db


volumes:
  db-data:
  website-static-folder:
  website-media-folder:
  logs:

CodePudding user response:

Docker runs manage.py collectstatic --noinput automatically, you don't have to run command for it. For custom commands, you can try adding this:

website:
  ...
  command: bash -c "python3 website/manage.py migrate --noinput &&
                    python3 website/manage.py createsuperuser --noinput &&
                    python3 website/manage.py runserver 0.0.0.0:[YOUR PORT]"
  ...

to your docker-compose.yml file.

  •  Tags:  
  • Related