Как я могу сохранить данные базы данных docker локально на моем сервере?
Я запускаю приложение внутри контейнера docker. Это приложение использует образ docker Postgres для сохранения данных в базе данных. Мне нужно сохранить локальную копию данных этой базы данных, чтобы избежать потери данных, если контейнер будет удален или очищен каким-то образом ... поэтому я использую volumes
внутри моего файла `docker-compose.YAML, но все равно локальная папка DB всегда пуста ... поэтому всякий раз, когда я перемещаю контейнер или очищаю его, данные теряются
docker-compose.yaml
version: "2"
services:
db:
image: postgres
volumes:
- ./data/db:/var/lib/postgresql/data
ports:
- '5433:5432'
restart: always
command: -p 5433
environment:
- POSTGRES_DB=mydata
- POSTGRES_USER=mydata
- POSTGRES_PASSWORD=mydata@
- PGDATA=/tmp
django-apache2:
build: .
container_name: rolla_django
restart: always
environment:
- POSTGRES_DB=mydata
- POSTGRES_USER=mydata
- POSTGRES_PASSWORD=mydata@
- PGDATA=/tmp
ports:
- '4002:80'
- '4003:443'
volumes:
- ./www/:/var/www/html
- ./www/demo_app/static_files:/var/www/html/demo_app/static_files
- ./www/demo_app/media:/var/www/html/demo_app/media
# command: sh -c 'python manage.py migrate && python manage.py loaddata db_backkup.json && apache2ctl -D FOREGROUND'
command: sh -c 'wait-for-it db:5433 -- python manage.py migrate && apache2ctl -D FOREGROUND'
depends_on:
- db
Как вы видите, я использовал ./data/db:/var/lib/postgresql/data
, но локально каталог ./data/db
всегда пуст!!!
НОТ
когда я использую docker volume list
, он не показывает никаких объемов вообще
В соответствии с вашей установкой, данные находятся в /tmp
: PGDATA=/tmp
. Удалите это, и сопоставление томов будет работать.
Также ваша команда -p 5433
заставляет postgres работать на порту 5433, но вы все еще используете порт 5432. Так что если вы не можете добраться до базы данных, это может быть из-за этого.