Назад | Перейти на главную страницу

База данных теряется при остановке контейнера Docker. Как вылечиться?

У меня есть следующий составной файл из этот проект:

version: "3"

volumes:
  static-files:
    driver: local
  postgres:
    driver: local

services:
    db:
      image: postgres:11.1
      volumes:
        - postgres:/var/lib/postgresql/data/pgdata
      env_file:
        - ./config/environment/development.env
      expose:
        - "5432"

    webapp:
      build:
        context: webapp
      volumes:
        - ./webapp/covidoff:/srv/covidoff
        - static-files:/srv/static-files
      ports:
        - "8000:8000"
        - "80:8000"
      depends_on:
        - db
      env_file:
        - ./config/environment/development.env

Как видите, запускаются две службы: база данных PostgreSQL. db и Джанго webapp. Пока все работает хорошо, кроме одного: каждый раз, когда я останавливаю db контейнер данные потеряны.

Кто-то сказал мне попробовать postgres:/var/lib/postgresql/data вместо того postgres:/var/lib/postgresql/data/pgdata, но это тоже не сработало.

Проблема в том, что этот сервер уже работает и с данными. Как я могу решить проблему с постоянством и по-прежнему сохранять текущие данные?

Некоторый прогресс. Простое изменение сделало так, что данные сохраняются после остановки контейнера, я просто не знаю почему. Я заменил это:

PGDATA=pgdata

С этим:

PGDATA=/var/lib/postgresql/data/pgdata

В моем env файл. Но почему это работает?

Драйвер тома докера не сохраняет ваши данные между перезапусками служб. Вы можете использовать локально-постоянный драйвер ; Я использовал это несколько раз для этого варианта использования.

Если у вас уже есть данные, вы можете создать том перед запуском служб и скопировать данные в указанный каталог. Postgres должен забрать базу данных оттуда.