Home > Blockchain >  How to dump and restore correctly a postgresql db from docker
How to dump and restore correctly a postgresql db from docker

Time:11-28

I stuck with this error when trying to backup and restore my database from a docker django app environnement : error

I first did this command to backup my whole DB

docker exec -t project_final-db-1 pg_dumpall -c -U fred2020 > ./db/dump.sql

And then trying to restory with this command

cat dump.sql | docker exec -i --user fred2020 catsitting-db-1 psql -U fred2020 -d postgres 

I have two containers, one for my django app named catsitting-web-1 and one for my postgresql named catsitting-db-1

I don't understand why it gaves me that error, my db user is the same that I specified on the dockerfile...

Any clue ? For purpose help, here is my docker files configuration :

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

And that's my process to migrate from laptop1 to laptop2 :

Installation Run a command line go into a root directory and run: git clone https://github.com/XXXXXXXXXXXXXXXX

In the command line go into the root directory: cd catsitting

In the same command line window, run: docker-compose build --no-cache

In the command line window you need first to migrate the database for Django, run : docker-compose run web python manage.py migrate

In the command line window then you need to apply the migrations, run : docker-compose run web python manage.py makemigrations

In the command line window then you need to import database, run : cat dump.sql | docker exec -i --user fred2020 catsitting-db-1 psql -U fred2020 -d postgres (for dumping my DB I used docker exec -t project_final-db-1 pg_dumpall -c -U fred2020 > ./db/dump.sql)

You can now run: docker-compose up

Is there something I get wrong ?

CodePudding user response:

I solved ! It was a problem in misconfiguration in the pg_hba.conf inside my docker postgresql I changed the value from scram-sha-256 to md5 and it works now I can display my webapp with the current db !!

Do you know how to specifie md5 when I build my docker environnement ? by default it puts scram-sha-256

CodePudding user response:

Do you know why when I restore my dump in the new environnement by default in the container the pg_hba.conf set the authentification methode to scram-sha-256 and to do my connection working I need to edit that file and to put the authentification method set to md5 ?

# TYPE  DATABASE        USER        ADDRESS     METHOD
local   all             all                     md5

CodePudding user response:

Ok sorry folks I found the solution. I've put that line in my docker-compose.yml:

environment:
- POSTGRES_HOST_AUTH_METHOD=trust
  • Related