sql >> Databasteknik >  >> RDS >> PostgreSQL

Kör skriptet efter behållarens ingångspunkt i docker-compose

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.




  1. Gör matte i MySQL från SELECT

  2. MySQL Workbench - Anslut till en lokal värd

  3. hur man ökar variabelvärdet med 1 för varje post med php mysql LOAD DATA INFILE

  4. MySql - Skapa tabell om det inte finns Else Trunkate?