Миграции не запускаются для докеризованного проекта Django

Я создал простой hello world проект с Django и Docker. В конце Dockerfile есть команда ниже:

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

которые активируют этот скрипт:

#!/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 "$@"

Проект запускается, но миграция не запускается, и я вынужден войти в контейнер и использовать python3 manage.py migrate для запуска миграции.

Почему команда миграции не выполняется, а collectstatic выполняется автоматически?

Ниже 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:

Docker запускает manage.py collectstatic --noinput автоматически, вам не нужно запускать для него команду. Для пользовательских команд вы можете попробовать добавить следующее:

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]"
  ...

в ваш docker-compose.yml файл.

Вернуться на верх