Docker-compose + Django + Postgresql
Я не могу добиться того, чтобы данные, которые я заполняю в своих моделях, попадали в мою базу данных. Когда я делаю миграции, проект работает в браузере, на localhost, но когда я просматриваю его в базе данных postgres, ничего не появляется. Я сделал свой docker-compose таким образом, чтобы он сам выполнял миграции, но все равно ничего не происходит.
docker-compose.yml
version: "3.9"
services:
db:
image: postgres
volumes:
- ./data/db:/var/lib/postgresql/data
environment:
- POSTGRES_ENGINE=${POSTGRES_ENGINE}
- POSTGRES_DB=${POSTGRES_DB}
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_HOST=${POSTGRES_HOST}
- POSTGRES_PORT=${POSTGRES_PORT}
web:
build: .
command: >
sh -c "python manage.py makemigrations &&
python manage.py migrate &&
python manage.py runserver 0.0.0.0:8000"
volumes:
- .:/code
ports:
- "8000:8000"
environment:
- POSTGRES_ENGINE=${POSTGRES_ENGINE}
- POSTGRES_DB=${POSTGRES_DB}
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_HOST=${POSTGRES_HOST}
- POSTGRES_PORT=${POSTGRES_PORT}
depends_on:
- db
Я пробовал все, я искал в нескольких местах, но ничто не заставляет мои миграции идти в мою базу данных. Кто-нибудь может мне помочь?
Dockerfile
FROM python:3.8
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
WORKDIR /code
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
settings.py
DATABASES = {
'default': {
'ENGINE': os.environ.get('POSTGRES_ENGINE'),
'NAME': os.environ.get('POSTGRES_DB'),
'USER': os.environ.get('POSTGRES_USER'),
'PASSWORD': os.environ.get('POSTGRES_PASSWORD'),
'HOST': os.environ.get('POSTGRES_HOST'),
'PORT': os.environ.get('POSTGRES_PORT'),
}
}
Мне удалось выяснить, в чем проблема. Я указал порт внутри docker-compose, взял его в свой .env файл и распространил как на мой docker-compose, так и на мой django
следующие изменения в моем docker-compose.yml:
version: "3.9"
services:
db:
image: postgres
ports:
- 5001:5432
volumes:
- ./data/db:/var/lib/postgresql/data
env_file:
- .env
web:
build: .
command: >
sh -c "python manage.py migrate &&
python manage.py runserver 0.0.0.0:8000"
volumes:
- .:/code
ports:
- "8000:8000"
env_file:
- .env
depends_on:
- db