PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Docker-Postgres mit anfänglichen Daten werden nicht über Commits beibehalten

Das Problem ist, dass die postgres Dockerfile „/var/lib/postgresql/data“ als Volume deklariert. Dies ist nur ein normales Verzeichnis, das sich außerhalb des von Bildern verwendeten Union File Systems befindet. Volumes leben, bis keine Container mehr mit ihnen verknüpft sind und sie explizit gelöscht werden.

Sie haben einige Möglichkeiten:

  • Verwenden Sie den --volumes-from Befehl zum Teilen von Daten mit neuen Containern. Dies funktioniert nur, wenn jeweils nur ein Postgres-Image ausgeführt wird, aber es ist die beste Lösung.
  • Schreiben Sie Ihr eigenes Dockerfile, das die Daten erstellt, bevor Sie das Volume deklarieren. Diese Daten werden dann beim Erstellen des Containers in das Volume kopiert.
  • Schreiben Sie einen Einstiegspunkt oder ein cmd-Skript, das die Datenbank zur Laufzeit füllt.

Alle diese Vorschläge erfordern, dass Sie Volumes verwenden, um die Daten zu verwalten, sobald der Container ausgeführt wird. Alternativ könnten Sie Ihr eigenes Dockerfile schreiben und einfach kein Volume deklarieren. Sie könnten dann docker commit verwenden um nach dem Hinzufügen von Daten ein neues Bild zu erstellen. Dies wird wahrscheinlich kurzfristig funktionieren, ist aber definitiv nicht so, wie Sie mit Containern arbeiten sollten - es ist nicht wiederholbar und Ihnen werden irgendwann die Ebenen im Union File System ausgehen.

Weitere Informationen finden Sie in den offiziellen Docker-Dokumenten zum Verwalten von Daten in Containern.