Как правильно сбросить и восстановить базу данных 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
Вернуться на верх