web-dev-qa-db-fra.com

Docker-Compose Postgresql import dump

J'ai une question sur docker et postgres. Je suis en train de configurer une nouvelle base de données postgres à chaque démarrage du docker et je veux importer un dump donné.

Mon problème est similaire, mais les réponses ne me suffisent pas: Docker postgres n’exécute pas le fichier init dans docker-entrypoint-initdb.d

Docker-Compose:

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

Mon fichier Docker: (je l'ai déjà essayé avec un script avec une terminaison .sh)

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

Selon https://hub.docker.com/_/postgres/ dump.sql doit être utilisé pour importer la base de données.

Le démarrage de l'application avec docker ne donne que:

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

Outre que j'ai testé si ma base de données a été importée, il n'y a pas de table dans ma base de données. Qu'est-ce que je fais mal (les fichiers sont en lecture et exécutables sur le système cible)? L'importer avec psql n'est pas un problème, donc mon dump est correct.

J'espère que vous pourrez m'aider et je vous en remercie d'avance.

11
Simon

Ok, j'ai trouvé le truc, je dois exécuter "docker-compose rm" afin d'exécuter les scripts et les fichiers SQL de ce dossier. Une fois construit et non supprimé, le dossier init est ignoré.

UPDATE J'ai rencontré à nouveau ce problème. Cette fois, la suppression des images créées par le menu fixe a résolu le problème.

12
Simon

Les réponses ici ont quelque peu résolu le problème pour moi, mais la dernière étape pour faire fonctionner les scripts docker-entrypoint-initdb/*.sql consistait à s’assurer qu’il n’y avait pas de problèmes de syntaxe dans les scripts SQL eux-mêmes (j’ai eu des problèmes parce que j’avais modifié les versions SQL dans mon fichier Docker).

S'il en existe, tout dans les scripts docker-entrypoint-initdb/*.sql semble avoir été annulé.

Pour vérifier s’il existe des problèmes de script de syntaxe (ou d’autres problèmes), il peut être utile de consulter les journaux du menu fixe:

$ docker ps -all

Remarque: le -all garantit qu'il répertorie également les images dont le démarrage a peut-être échoué.

Recherchez l'image que vous venez de créer et recherchez l'ID de conteneur qui devrait être un hachage de 12 caractères:

$ docker logs baf32ff7ec03

Rappelez-vous que vous devez toujours suivre les autres réponses ici - qui consistent à récupérer les images précédemment construites et à supprimer votre dossier de données (sauvegardez-le si nécessaire).

0
alexkb