PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Esegui lo script dopo il punto di ingresso del contenitore in Docker-Compose

Stai sovrascrivendo il command originale e non avvii postgres in questo script, motivo per cui il tuo database non è disponibile.

Puoi inserire l'inizializzazione del database nella directory del punto di ingresso del contenitore:/docker-entrypoint-initdb.d . Questo esegue tutti i *.sh e *.sql file in questa directory e non tocca il command originale .
Tutti i file in questa directory vengono eseguiti automaticamente in ordine alfabetico alla creazione del contenitore . Pertanto, crea un volume per aggiungere i tuoi script / file sql all'entrypoint e lascia che il contenitore li esegua. Questo è descritto nella documentazione ufficiale di Postgres, sezione "Come estendere questa immagine" .

Il tuo file di composizione cambia quindi in qualcosa del genere:

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

mentre una directory locale, ad es. db-init-scripts , contiene i tuoi script di inizializzazione (rinominalo se vuoi). Copia create_db.sh in questa cartella e verrà eseguito automaticamente quando crei un nuovo contenitore.

Diverse immagini di database controllano questa directory di entrypoint, il che è molto conveniente.

Il tuo container_name: postgres sembra ridondante.