2015-07-30 18 views
7

Ich benutze Docker Postgres: 9.4 Bild. Ich muss wissen, wie man Volumenbehälter nur sichert und wieder herstellt.Docker Backup und Wiederherstellung Postgres

Erstellt Behälter Volumen:

docker run -v /var/lib/postgresql/data --name dbdata postgres:9.4 /bin/true 

die Lautstärke mit

docker run --name=postgres --volumes-from=dbdata -d -p 6432:5432 postgres:9.4 

Backup-Volume Container

docker run --volumes-from dbdata -v $(pwd):/backup postgres:9.4 tar cvf /backup/backup.tar /var/lib/postgresql/data 

Volumen in neuen Container wiederherstellen

docker run --name=dbdata-new --volumes-from dbdata -v $(pwd):/backup ubuntu:14.04 /bin/sh -c 'cd /var/lib/postgresql/data && tar xvf /backup/backup.tar' 

Einsatz im neuen Volumen neuen Postgres Behälter bei der Schaffung von:

docker run --name=postgres-new --volumes-from=dbdata-new -d -p 7532:5432 postgres:9.4 

Ausgabe:ich die folgenden Fehler in den Protokollen, wenn ich führe den neuen Container aus.

initdb: Verzeichnis "/ var/lib/postgresql/data" existiert, aber nicht leer Wenn Sie ein neues Datenbanksystem erstellen möchten, entweder entfernen oder leer das Verzeichnis „/ var/lib/postgresql/Daten "oder run initdb mit einem anderen Argument als"/var/lib/postgresql/data "

Nicht sicher, was ich falsch mache. Kann jemand bitte darauf hinweisen, wo ich Fehler mache?

+0

folgte Ihren Schritten und hat keine Fehler im Protokoll. –

+0

Add-Datenbank und Tabellen und versuchen Sie es – unnik

+0

arbeiteten in einer Datenbank mit einer Tabelle in Ordnung, importiert und erhältlich bei Postgres-neu: –

Antwort

2

Daten neue --volumes-von dbdata -v $ (PWD):/backup ubuntu: 14.04/bin/sh -c 'cd/var/lib/postgresql/data & & tarxvf /backup/backup.tar '

Der fette Text war das Problem. Durch das Entpacken der Sicherung im Ordner/var/lib/postgresql/data erstellte der Befehl tar/var/lib/postgresql/data im obigen Ordner.

Vielen Dank für die Hilfe MyKola.

2

konnte nicht leicht das Problem reproduzieren Sie die Schritte mit sehr Rudiment Daten (ein Datensatz einer Tabelle eine neue db):

psql -U postgres -h $(boot2docker ip || echo 'localhost') -p 6432 -c "CREATE DATABASE ttt;" 
psql -U postgres -h $(boot2docker ip || echo 'localhost') -p 6432 -d ttt -c "CREATE table a(b int); insert into a(b) values(1);" 
psql -U postgres -h $(boot2docker ip || echo 'localhost') -p 6432 -d ttt -c "select * from a;" 

wenn ich beginne die postgres-new ich keine Ausnahmen in Protokollen erhalten und die Daten scheint da sein:

$ psql -U postgres -h $(boot2docker ip || echo 'localhost') -p 7532 -d ttt -c "select * from a;" 
b 
--- 
1 
(1 row) 
Verwandte Themen