Django Docker Setup: OperationalError - «FATAL: база данных „guardian_grid“ не существует» с PostgreSQL после нескольких дней работы
Я столкнулся с повторяющейся проблемой в моем проекте Django, настроенном на работу с PostgreSQL в Docker. После нескольких дней бесперебойной работы база данных PostgreSQL неожиданно дает сбой, и я получаю следующую ошибку:
django.db.utils.OperationalError: connection to server at "postgres" (172.18.0.2), port 5432 failed: FATAL: database "guardian_grid" does not exist
Ниже я поделился своей конфигурацией Docker Compose. В настройках предусмотрены тома для постоянных данных и резервное хранилище для PostgreSQL. Несмотря на это, база данных иногда «исчезает», и я не знаю, почему это происходит. Я хочу узнать о возможных причинах и решениях, которые позволят сохранить базу данных в целости и сохранности.
volumes:
guardian_grid_local_postgres_data: {}
guardian_grid_local_postgres_data_backups: {}
services:
postgres:
build:
context: .
dockerfile: ./compose/production/postgres/Dockerfile
image: guardian_grid_local_postgres
container_name: guardian_grid_local_postgres
volumes:
- guardian_grid_local_postgres_data:/var/lib/postgresql/data
- guardian_grid_local_postgres_data_backups:/backups
- /home/ehabsami/Desktop/guardian_grid/init.sql:/docker-entrypoint-initdb.d/init.sql
env_file:
- .envs/.local/.postgres
ports:
- "5432:5432"
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 10s
retries: 5
guardian_grid:
build:
context: .
dockerfile: ./compose/production/django/Dockerfile # Ensure correct path for Django Dockerfile
restart: always
image: guardian_grid_local_django
container_name: guardian_grid_local_django
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_started
volumes:
- .:/app:z
command: /bin/sh -c "/run.sh" # Ensure run.sh exists
ports:
- "8000:8000"
env_file:
- .envs/.local/.django
redis:
image: "redis:alpine"
ports:
- "6379:6379"
# Python and dependencies setup
FROM docker.io/python:3.12.4-slim-bookworm AS python
# Python build stage
FROM python AS python-build-stage
ARG BUILD_ENVIRONMENT=local
RUN apt-get update && apt-get install -y build-essential libpq-dev && apt-get clean
COPY requirements.txt .
RUN pip wheel --wheel-dir /usr/src/app/wheels -r requirements.txt
# Python run stage
FROM python AS python-run-stage
ARG BUILD_ENVIRONMENT=local
ARG APP_HOME=/app
ENV PYTHONUNBUFFERED=1
ENV PYTHONDONTWRITEBYTECODE=1
ENV BUILD_ENV=${BUILD_ENVIRONMENT}
WORKDIR ${APP_HOME}
RUN apt-get update && apt-get install --no-install-recommends -y \
sudo git bash-completion nano ssh gettext libpq-dev \
&& apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \
&& rm -rf /var/lib/apt/lists/*
COPY --from=python-build-stage /usr/src/app/wheels /wheels/
RUN pip install --no-cache-dir --no-index --find-links=/wheels/ /wheels/* && rm -rf /wheels/
COPY . ${APP_HOME}
COPY ./run.sh /run.sh
RUN chmod +x /run.sh
COPY ./run.sh /run_prod.sh
RUN chmod +x /run_prod.sh
postgres docker file
FROM docker.io/postgres:16
COPY ./compose/production/postgres/maintenance /usr/local/bin/maintenance
RUN chmod +x /usr/local/bin/maintenance/*
RUN mv /usr/local/bin/maintenance/* /usr/local/bin && rmdir /usr/local/bin/maintenance
Несмотря на настройку постоянных томов, база данных иногда «исчезает», что приводит к ошибке. Я не уверен, есть ли проблема в том, как монтируются тома, ошибка конфигурации или что-то еще. Любые соображения о том, почему это может происходить, или о том, как я могу обеспечить постоянство и работоспособность моей базы данных, будут весьма признательны.
Вопросы
Is there something I’m missing in the Docker Compose or PostgreSQL setup that could cause the database to be deleted or inaccessible?
Could there be a Docker volume configuration or permission issue that might cause the database to “disappear” after running for a while?
Are there specific configurations to ensure long-term persistence of the PostgreSQL database in Docker?