Миграции не запускаются для докеризованного проекта 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
файл.