# Postgresql Backup and Restore in Docker ## Make pg backup ```shell docker exec -e PGPASSWORD='' \ pg_dump -U -d -Fc -f /tmp/database.dump ``` ## Copy backup to root ```shell docker cp :/tmp/database.dump /root/database.dump ``` ## Stop and remove old container ```shell docker stop docker rm ``` ## Remove old database files ```shell rm -rf /mnt// mkdir /mnt// chown 999 /mnt// chmod 700 /mnt// ``` ## Start new container ```shell docker run \ --name \ --detach \ --restart unless-stopped \ --network \ --volume /mnt/:/var/lib/postgresql/data \ --env POSTGRES_DB= \ --env POSTGRES_USER= \ --env POSTGRES_PASSWORD= docker.io/library/postgres:17 ``` ## Copy backup to new container ```shell docker cp /root/database.dump :/tmp/database.dump ``` ## Verify role and db ```shell docker exec -e PGPASSWORD='' \ psql -U -c "CREATE ROLE WITH LOGIN PASSWORD '';" docker exec -e PGPASSWORD='' \ psql -U -c "CREATE DATABASE OWNER ;" ``` ## Restore backup ```shell docker exec -e PGPASSWORD='' \ pg_restore -U -d -Fc /tmp/database.dump ```