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.