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.