sql >> Database >  >> RDS >> PostgreSQL

Voer script uit na containeringangspunt in docker-compose

Je overschrijft het originele command en je start postgres niet in dit script, daarom is je database niet beschikbaar.

U kunt uw database-initialisatie in de entrypointdirectory van de container plaatsen:/docker-entrypoint-initdb.d . Dit voert alle *.sh . uit en *.sql bestanden in deze map en raakt het originele command . niet aan .
Alle bestanden in deze map worden automatisch uitgevoerd in alfabetische volgorde bij het maken van containers . Maak daarom een ​​volume om uw scripts / sql-bestanden aan het ingangspunt toe te voegen en laat de container ze uitvoeren. Dit wordt beschreven in de officiële postgres-documentatie, sectie "Hoe deze afbeelding uit te breiden" .

Je opstelbestand verandert dan in zoiets als dit:

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

terwijl een lokale directory, b.v. db-init-scripts , bevat uw initialisatiescripts (hernoem deze als u wilt). Kopieer create_db.sh naar deze map en het wordt automatisch uitgevoerd wanneer u een nieuwe container maakt.

Verschillende database-images bekijken deze entrypoint-directory, wat erg handig is.

Uw container_name: postgres lijkt overbodig.




  1. MySQL GROUP Op aantal

  2. Gevaar van het gebruik van 'IF BESTAAT... UPDATE .. ELSE .. INSERT' en wat is het alternatief?

  3. Vangbare fatale fout:object van klasse mysqli_stmt kon niet worden geconverteerd naar string

  4. Mysql - Voorkomen van dubbele invoer van gecombineerde kolommen met Unieke Index