Как правильно сбросить и восстановить базу данных postgresql из docker
Я столкнулся с этой ошибкой при попытке резервного копирования и восстановления моей базы данных из окружения docker django app : error
Сначала я выполнил эту команду для резервного копирования всей моей БД
docker exec -t project_final-db-1 pg_dumpall -c -U fred2020 > ./db/dump.sql
А затем пытаемся восстановить с помощью этой команды
cat dump.sql | docker exec -i --user fred2020 catsitting-db-1 psql -U fred2020 -d postgres
У меня есть два контейнера, один для моего приложения django под названием catsitting-web-1 и один для моего postgresql под названием catsitting-db-1
Я не понимаю, почему он выдает мне эту ошибку, мой пользователь db тот же, что я указал в dockerfile...
Есть подсказка?
Для справки, вот моя конфигурация файлов docker :
Dockerfile
FROM python:3.9
ENV PYTHONUNBUFFERED=1
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
RUN pip install Pillow
COPY . /code/
docker-compose.yml
version: "3.9"
services:
db:
image: postgres
environment:
- POSTGRES_DB=postgres
- POSTGRES_USER=fred2020
- POSTGRES_PASSWORD=p*******DD
expose:
- "5432"
ports:
- 5432:5432
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
- db
requirements.txt
Django>=3.0,<4.0
psycopg2-binary>=2.8
Pillow==8.1.0
Вот мой процесс миграции с ноутбука1 на ноутбук2 :
Установка
Запустите командную строку зайдите в корневой каталог и запустите:
git clone https://github.com/XXXXXXXXXXXXXXXX
В командной строке перейдите в корневой каталог:
cd catsitting
В том же окне командной строки выполните:
docker-compose build --no-cache
В окне командной строки нужно сначала перенести базу данных для Django, запустите :
docker-compose run web python manage.py migrate
В окне командной строки затем нужно применить миграции, запустите :
docker-compose run web python manage.py makemigrations
В окне командной строки затем нужно импортировать базу данных, запустите :
cat dump.sql | docker exec -i --user fred2020 catsitting-db-1 psql -U fred2020 -d postgres
(для дампа моей БД я использовал docker exec -t project_final-db-1 pg_dumpall -c -U fred2020 > ./db/dump.sql
)
Теперь вы можете бежать:
docker-compose up
Есть ли что-то, что я делаю неправильно?
Я решил! Это была проблема в неправильной конфигурации в pg_hba.conf внутри моего докера postgresql. Я изменил значение с scram-sha-256 на md5 и все работает, теперь я могу отображать свой webapp с текущей базой данных !!!
Знаете ли вы, как указать md5 при сборке окружения docker? По умолчанию он ставит scram-sha-256
Знаете ли вы, почему, когда я восстанавливаю свой дамп в новом окружении, по умолчанию в контейнере pg_hba.conf установлен метод аутентификации scram-sha-256, а чтобы мое соединение работало, мне нужно отредактировать этот файл и установить метод аутентификации на md5?
# TYPE DATABASE USER ADDRESS METHOD
local all all md5
Ок, извините, друзья, я нашел решение. Я вставил эту строку в мой docker-compose.yml:
environment:
- POSTGRES_HOST_AUTH_METHOD=trust