Du åsidosätter det ursprungliga command och du startar inte postgres i det här skriptet vilket är anledningen till att din databas inte är tillgänglig.
Du kan lägga in din databasinitiering i containerns entrypoint-katalog:/docker-entrypoint-initdb.d . Detta kör alla *.sh och *.sql filer i den här katalogen och rör inte det ursprungliga command .
Alla filer i den här katalogen körs automatiskt i alfabetisk ordning vid skapandet av behållare . Skapa därför en volym för att lägga till dina skript/sql-filer till ingångspunkten och låt behållaren köra dem. Detta beskrivs i den officiella postgres-dokumentationen, avsnittet "Hur man utökar denna bild"
.
Din skrivfil ändras sedan till något i stil med detta:
postgres:
build: ./postgres
volumes:
- /shared_folder/postgresql:/var/lib/postgresql
- ./db-init-scripts:/docker-entrypoint-initdb.d
ports:
- "5432:5432"
medan en lokal katalog, t.ex. db-init-scripts , innehåller dina initialiseringsskript (byt namn på det om du vill). Kopiera create_db.sh till den här mappen och den kommer att köras automatiskt när du skapar en ny behållare.
Flera databasbilder tittar på denna entrypoint-katalog, vilket är väldigt bekvämt.
Ditt container_name: postgres verkar överflödigt.