Docker-compose Veri Kaybı

Merhaba ‘docker-compose’ ile bir proje yapıyorum. projeyi herhangi bir sebeple kapatıp açtığımda veriler kayboluyor. Sebebi ne olabilir?

docker-compose restart deyince de down & up deyince de veri kayboluyor.
volume hiç yokmuş gibi yeniden oluşturuluyor. daha önce yaptığım bütün değişiklikler (django admin paneli üzerinden bir şeyler eklleyip siliyorum.) kayboluyor.

docker-compose dosyası:

version: '3.7'

services:
  backend:
    build: ./backend
    container_name: backend
    command: python manage.py runserver 0.0.0.0:8000
    restart: 'no'
    volumes:
      - ./backend/:/usr/src/app/
    ports:
      - 8000:8000
    env_file:
      - ./.env.dev
    depends_on:
      - db
  frontend:
    build: ./frontend
    container_name: frontend
    command: npm run serve
    restart: 'no'
    ports:
      - 8080:8080
    env_file:
      - ./.env.dev
    depends_on:
      - backend
  db:
    image: postgres:13.0-alpine
    container_name: database
    restart: 'no'
    volumes:
      - postgres_data:/var/lib/postgresql/data/
    env_file:
      - ./.env.dev
      
volumes:
  postgres_data:

backend Dockerfile

# pull official base image
FROM python:3.8-alpine

# set work directory
WORKDIR /usr/src/app

# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# install psycopg2 dependencies
RUN apk update \
    && apk add icu-data-full\
    && apk add --no-cache curl gpg gnupg\
    && apk add --no-cache postgresql-dev gcc libc-dev g++ libffi-dev libxml2 python3-dev musl-dev unixodbc unixodbc-dev mariadb-dev

# install dependencies
RUN pip install --upgrade pip
COPY ./requirements.txt .
RUN pip install -r requirements.txt

# copy project
COPY . .

# mssql dependicies
RUN apk add --allow-untrusted msodbcsql17_17.10.1.1-1_amd64.apk \
    && apk add --allow-untrusted mssql-tools_17.10.1.1-1_amd64.apk

# run entrypoint.sh
ENTRYPOINT ["/usr/src/app/entrypoint.sh"]

entrypoint.sh dosyasında projeyi başlatırken veri eklemesi için kod yazmıştım.

#!/bin/sh

if [ "$DATABASE" = "postgres" ]
then
    echo "Waiting for postgres..."

    while ! nc -z $SQL_HOST $SQL_PORT; do
      sleep 0.1
    done

    echo "PostgreSQL started"
fi

python manage.py flush --no-input
python manage.py makemigrations
python manage.py migrate
python manage.py createcachetable

# create superuser
if [ "$DJANGO_SUPERUSER_USERNAME" ]
then
    python manage.py createsuperuser \
        --noinput \
        --username $DJANGO_SUPERUSER_USERNAME  \
        --email $DJANGO_SUPERUSER_EMAIL
fi

# create user
python manage.py add_user

# create object samples
python manage.py add_external_data_samples
python manage.py add_tableau_samples

exec "$@"

terminalden proje açıkken ya da kapalıyken baktığımda volume görünüyor. bunu tamamen silip denediğimde de sorun aynı şekilde devam etti.

.../project$ sudo docker volume ls
DRIVER    VOLUME NAME
local     project_postgres_data
.../project$ sudo docker volume inspect project_postgres_data
[
    {
        "CreatedAt": "2023-06-22T15:12:07+03:00",
        "Driver": "local",
        "Labels": {
            "com.docker.compose.project": "project",
            "com.docker.compose.version": "1.25.0",
            "com.docker.compose.volume": "postgres_data"
        },
        "Mountpoint": "/var/lib/docker/volumes/project_postgres_data/_data",
        "Name": "project_postgres_data",
        "Options": null,
        "Scope": "local"
    }
]
1 Beğeni

entrypoint e şöyle bir şey ekleyip sonra varlığını unutmuşum.

3 Beğeni

python manage.py flush --no-input

Merhaba. Sorun sadece bu muydu yoksa başka bir sorun daha var mıydı ?

python manage.py flush --no-input

bu satır bütün veriyi siliyor. yani aslında bir sorun yokmuş. ben önce “konteyner her başlatıldığında önceki bütün veriyi sil” deyip sonra “verilere nerede” diye hayret ediyormuşum.

1 Beğeni