PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Exécuter le script après le point d'entrée du conteneur dans docker-compose

Vous remplacez la command d'origine et vous ne démarrez pas postgres dans ce script, c'est pourquoi votre base de données n'est pas disponible.

Vous pouvez placer l'initialisation de votre base de données dans le répertoire du point d'entrée du conteneur :/docker-entrypoint-initdb.d . Cela exécute tous les *.sh et *.sql fichiers dans ce répertoire et ne touche pas la command d'origine .
Tous les fichiers de ce répertoire sont automatiquement exécutés dans l'ordre alphabétique lors de la création du conteneur . Par conséquent, créez un volume pour ajouter vos scripts/fichiers sql au point d'entrée et laissez le conteneur les exécuter. Ceci est décrit dans la documentation officielle de postgres, section "Comment étendre cette image" .

Votre fichier de composition se transforme alors en quelque chose comme ceci :

postgres:
  build: ./postgres
  volumes:
    - /shared_folder/postgresql:/var/lib/postgresql
    - ./db-init-scripts:/docker-entrypoint-initdb.d
  ports:
    - "5432:5432"

alors qu'un répertoire local, par ex. db-init-scripts , contient vos scripts d'initialisation (renommez-le si vous le souhaitez). Copiez create_db.sh dans ce dossier et il sera automatiquement exécuté lorsque vous créerez un nouveau conteneur.

Plusieurs images de base de données surveillent ce répertoire de points d'entrée, ce qui est très pratique.

Votre container_name: postgres semble redondant.