it-swarm.com.de

Docker-Compose Postgresql-Import-Dump

Ich habe eine Frage zu Docker und Postgres. Ich stelle bei jedem Start von Docker eine neue Postgres-Datenbank ein und möchte einen bestimmten Speicherauszug importieren.

Mein Problem ist wie, aber die Antworten sind für mich nicht ausreichend: Docker postgres führt keine init-Datei in docker-entrypoint-initdb.d aus

Docker-Compose:

postgres:
  environment:
   - POSTGRES_USER=****
   - POSTGRES_PASSWORD=****
   - POSTGRES_DB=****
build:
  context: .
  dockerfile: dockerfile-postgres

Meine Dockerfile: (Ich habe es schon mit einem Skript mit der Endung .sh probiert)

FROM postgres
ADD dump.sql /docker-entrypoint-initdb.d/

Gemäß https://hub.docker.com/_/postgres/ dump.sql muss die Datenbank importiert werden.

Das Starten der Anwendung mit Docker gibt nur Folgendes:

postgres_1     | LOG:  invalid record length at 0/1708600
postgres_1     | LOG:  redo is not required
postgres_1     | LOG:  MultiXact member wraparound protections are now enabled
postgres_1     | LOG:  database system is ready to accept connections
postgres_1     | LOG:  autovacuum launcher started

Außerdem habe ich getestet, ob meine Datenbank importiert wurde. Es gibt keine Tabelle in meiner Datenbank. Was mache ich falsch (Dateien sind auf dem Zielsystem lesbar und ausführbar)? Der Import mit psql ist kein Problem, daher ist mein Dump korrekt.

Ich hoffe, dass Sie mir helfen können, und ich möchte Ihnen im Voraus dafür danken.

11
Simon

Okay, ich habe den Trick gefunden, ich muss "docker-compose rm" ausführen, um die Skripts und SQL-Dateien in diesem Ordner ausführen zu können. Sobald der init-Ordner erstellt und nicht entfernt wurde, wird er ignoriert.

UPDATE Ich bin erneut auf dieses Problem gestoßen, dieses Mal durch das Entfernen der erstellten Bilder wurde das Problem behoben.

12
Simon

Die Antworten hier lösten das Problem etwas für mich, aber der letzte Schritt, um die docker-entrypoint-initdb/*.sql-Skripts zum Laufen zu bringen, bestand darin sicherzustellen, dass in den SQL-Skripts selbst keine Syntaxprobleme auftraten (ich hatte Probleme, weil ich die SQL-Versionen in meiner Docker-Datei geändert habe).

Wenn es welche gibt, scheinen alle in den docker-entrypoint-initdb/*.sql-Skripten zurückgesetzt zu werden.

Um zu überprüfen, ob Probleme mit dem Syntax-Skript (oder anderen Problemen) vorliegen, sollten Sie die Docker-Protokolle überprüfen:

$ docker ps -all

Hinweis: Der -all stellt sicher, dass die Bilder aufgelistet werden, die möglicherweise nicht gestartet wurden.

Suchen Sie das gerade erstellte Bild und suchen Sie nach der Container-ID, die ein 12-stelliger Hash sein sollte:

$ docker logs baf32ff7ec03

Denken Sie daran, dass Sie den anderen Antworten hier noch folgen müssen - nämlich, um die zuvor erstellten Bilder zu löschen und Ihren Datenordner zu löschen (wenn nötig, sichern Sie ihn).

0
alexkb