У меня есть следующий составной файл из этот проект:
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 должен забрать базу данных оттуда.