Um auf der Antwort von irakli aufzubauen, hier eine aktualisierte Lösung:
- neuere Version 2 Docker Compose-Datei verwenden
- getrennte
volumes
Abschnitt - zusätzliche Einstellungen gelöscht
docker-compose.yml
version: '2'
services:
postgres9:
image: postgres:9.4
expose:
- 5432
volumes:
- data:/var/lib/postgresql/data
volumes:
data: {}
Demo
Starten Sie den Postgres-Datenbankserver:
$ docker-compose up
Alle Tabellen in der Datenbank anzeigen. Sprechen Sie in einem anderen Terminal mit Postgres des Containers:
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c '\z'
Es wird nichts angezeigt, da die Datenbank leer ist. Erstellen Sie eine Tabelle:
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c 'create table beer()'
Listen Sie die neu erstellte Tabelle auf:
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c '\z'
Access privileges
Schema | Name | Type | Access privileges | Column access privileges
--------+-----------+-------+-------------------+--------------------------
public | beer | table | |
Yay! Wir haben jetzt eine Postgres-Datenbank mit einem gemeinsam genutzten Speichervolume gestartet und einige Daten darin gespeichert. Der nächste Schritt besteht darin, zu überprüfen, ob die Daten tatsächlich vorhanden sind, nachdem der Server gestoppt wurde.
Beenden Sie jetzt den Container des Postgres-Servers:
$ docker-compose stop
Starten Sie den Postgres-Container erneut:
$ docker-compose up
Wir gehen davon aus, dass der Datenbankserver den Speicher wiederverwendet, sodass unsere sehr wichtigen Daten immer noch vorhanden sind. Überprüfen Sie:
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c '\z'
Access privileges
Schema | Name | Type | Access privileges | Column access privileges
--------+-----------+-------+-------------------+--------------------------
public | beer | table | |
Wir haben erfolgreich eine Docker-Compose-Datei neuen Stils verwendet, um eine Postgres-Datenbank mit einem externen Datenvolume auszuführen, und überprüft, ob sie unsere Daten sicher und zuverlässig hält.
Speichern von Daten
Erstellen Sie zuerst ein Backup und speichern Sie unsere Daten auf dem Host:
$ docker exec -it $(docker-compose ps -q postgres9 ) pg_dump -Upostgres > backup.sql
Zappen Sie unsere Daten aus der Gästedatenbank:
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c 'drop table beer'
Stellen Sie unser Backup (auf dem Host gespeichert) im Postgres-Container wieder her.
Hinweis: Verwenden Sie "exec -i", nicht "-it", andernfalls erhalten Sie einen "Eingabegerät ist kein TTY"-Fehler.
$ docker exec -i $(docker-compose ps -q postgres9 ) psql -Upostgres < backup.sql
Listen Sie die Tabellen auf, um zu überprüfen, ob die Wiederherstellung funktioniert hat:
$ docker exec -it $(docker-compose ps -q postgres9 ) psql -Upostgres -c '\z'
Access privileges
Schema | Name | Type | Access privileges | Column access privileges
--------+-----------+-------+-------------------+--------------------------
public | beer | table | |
Zusammenfassend haben wir verifiziert, dass wir eine Datenbank starten können, die Daten nach einem Neustart bestehen bleiben und wir eine Sicherung vom Host darin wiederherstellen können.
Danke Tomasz!