Zastępujesz oryginalne command
i nie uruchamiasz postgresa w tym skrypcie, dlatego Twoja baza danych jest niedostępna.
Możesz umieścić inicjalizację bazy danych w katalogu punktu wejścia kontenera:/docker-entrypoint-initdb.d
. To wykonuje wszystkie *.sh
i *.sql
pliki w tym katalogu i nie dotyka oryginalnego command
.
Wszystkie pliki w tym katalogu są automatycznie wykonywane w kolejności alfabetycznej podczas tworzenia kontenera . Dlatego utwórz wolumin, aby dodać swoje skrypty / pliki sql do punktu wejścia i pozwól kontenerowi je wykonać. Jest to opisane w oficjalnej dokumentacji postgres, sekcja "Jak rozszerzyć ten obraz"
.
Twój plik do tworzenia zmienia się wtedy na coś takiego:
postgres:
build: ./postgres
volumes:
- /shared_folder/postgresql:/var/lib/postgresql
- ./db-init-scripts:/docker-entrypoint-initdb.d
ports:
- "5432:5432"
natomiast katalog lokalny, np. db-init-scripts
, zawiera twoje skrypty inicjujące (zmień ich nazwę, jeśli chcesz). Skopiuj create_db.sh
do tego folderu i zostanie on automatycznie wykonany po utworzeniu nowego kontenera.
Kilka obrazów bazy danych obserwuje ten katalog-punkt wejścia, co jest bardzo wygodne.
Twój container_name: postgres
wydaje się zbędne.