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.
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.
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).