web-dev-qa-db-fra.com

Comment générer un vidage Postgresql à partir d'un conteneur Docker?

Je voudrais avoir un moyen d'entrer dans le conteneur Postgresql et obtenir un vidage de données à partir de celui-ci.

14

Utilisez la commande suivante depuis un terminal UNIX:

docker exec <container_name> pg_dump <schema_name> > backup

La commande suivante exportera uniquement les insertions de toutes les tables:

docker exec <container_name> pg_dump --column-inserts --data-only  <schema_name> > inserts.sql
20

J'ai un conteneur nommé postgres avec volume monté -v /backups:/backups

Pour sauvegarder une base de données gziped my_db I use:

docker exec postgres pg_dump -U postgres -F t my_db | gzip >/backups/my_db-$(date +%Y-%m-%d).tar.gz

Maintenant j'ai

user@my-server:/backups$ ls
my_db-2016-11-30.tar.gz
11
Jekis

Bien que la solution de point de montage ci-dessus semblait prometteuse, voici la seule solution qui a fonctionné pour moi après plusieurs itérations:

docker run -it  -e PGPASSWORD=my_password postgres:Alpine  pg_dump  -h hostname -U my_user my_db > backup.sql

Ce qui était unique dans mon cas: j'ai un mot de passe sur la base de données qui doit être transmis; nécessaire pour passer l'étiquette (Alpine); et enfin la version hôtes des outils psql était différente des versions de docker.

3
jonathanjg

Une autre méthode consiste à démarrer postgre sql avec un point de montage à l'emplacement du dump dans le menu fixe.

comme docker run -v <location of the files>. Ensuite, effectuez une inspection de docker sur le conteneur en cours d'exécution de docker

docker inspect <image_id>

vous pouvez trouver la balise "Volumes" à l'intérieur et un emplacement correspondant. Allez à l'emplacement et vous pouvez trouver tous les fichiers postgresql/mysql.Il a fonctionné pour moi.Laissez-nous savoir si cela a également fonctionné pour vous.

Bonne chance

1
Pratik

Pour exécuter le conteneur avec l'utilisateur et le mot de passe Postgres, vous devez avoir des variables préconfigurées en tant que variable d'environnement de conteneur. Par exemple:

docker run -it --rm --link <container_name>:<data_container_name> -e POSTGRES_PASSWORD=<password> postgres /usr/bin/pg_dump -h <data_container_name> -d <database_name> -U <postgres_username> > dump.sql 

0
learner