PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Führen Sie das Skript nach dem Einstiegspunkt des Containers in docker-compose aus

Sie überschreiben den ursprünglichen command und Sie starten Postgres nicht in diesem Skript, weshalb Ihre Datenbank nicht verfügbar ist.

Sie können Ihre Datenbankinitialisierung in das Einstiegspunktverzeichnis des Containers stellen:/docker-entrypoint-initdb.d . Dies führt alle *.sh aus und *.sql Dateien in diesem Verzeichnis und berührt nicht den ursprünglichen command .
Alle Dateien in diesem Verzeichnis werden bei der Container-Erstellung automatisch in alphabetischer Reihenfolge ausgeführt . Erstellen Sie daher ein Volume, um Ihre Skripte / SQL-Dateien zum Einstiegspunkt hinzuzufügen, und lassen Sie sie vom Container ausführen. Dies ist in der offiziellen Postgres-Dokumentation im Abschnitt "How to extend this image" beschrieben .

Ihre Compose-Datei ändert sich dann in etwa so:

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

wohingegen ein lokales Verzeichnis, z.B. db-init-scripts , enthält Ihre Initialisierungsskripte (benennen Sie sie um, wenn Sie möchten). Kopieren Sie create_db.sh in diesen Ordner und wird automatisch ausgeführt, wenn Sie einen neuen Container erstellen.

Mehrere Datenbank-Images beobachten dieses Entrypoint-Verzeichnis, was sehr praktisch ist.

Ihr container_name: postgres scheint überflüssig.