it-swarm.com.de

Wie generiert man einen Postgresql-Dump aus einem Docker-Container?

Ich möchte einen Weg haben, in den Postgresql-Container einzugehen und einen Daten-Dump daraus zu erhalten.

Verwenden Sie den folgenden Befehl von einem UNIX-Terminal aus:

docker exec <container_name> pg_dump <schema_name> > backup

Der folgende Befehl gibt nur Einfügungen aus allen Tabellen aus:

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

Ich habe einen Container namens postgres mit angehängtem Volume -v /backups:/backups

Um gziped DB my_db zu sichern, verwende ich:

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

Jetzt habe ich

[email protected]:/backups$ ls
my_db-2016-11-30.tar.gz
11
Jekis

Obwohl die oben genannte Mountpoint-Lösung vielversprechend aussah, war die folgende Lösung die einzige, die nach mehreren Iterationen für mich funktionierte:

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

Was in meinem Fall einzigartig war: Ich habe ein Passwort in der Datenbank, das übergeben werden muss; in dem Tag (Alpine) übergeben werden müssen; und schließlich unterschied sich die hosts-Version der psql-tools von den Docker-Versionen.

3
jonathanjg

Eine andere Problemumgehung besteht darin, Postgre-SQL mit einem Mountpoint an der Position des Dumps im Andockfenster zu starten.

wie docker run -v <location of the files>. Führen Sie anschließend eine Docker-Inspektion im Docker-Container durch

docker inspect <image_id>

sie finden das "Volumes" -Tag und einen entsprechenden Speicherort. Gehen Sie zum Speicherort und finden Sie alle Postgresql/MySQL-Dateien. Es hat für mich funktioniert.

Viel Glück

1
Pratik

Um den Container mit dem Postgres-Benutzer und -Kennwort auszuführen, müssen Sie als Container-Umgebungsvariable vorkonfigurierte Variablen haben. Zum Beispiel:

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