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.