EDYCJA - od 23 lipca 2015 r
Oficjalny postgres doker obraz będzie działać .sql
skrypty znajdują się w /docker-entrypoint-initdb.d/
katalogu.
Więc wszystko, czego potrzebujesz, to utworzyć następujący skrypt SQL:
init.sql
CREATE USER docker;
CREATE DATABASE docker;
GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
i dodaj go do swojego pliku Docker:
Plik Docker
FROM library/postgres
COPY init.sql /docker-entrypoint-initdb.d/
Ale od 8 lipca 2015 roku, jeśli wszystko, co potrzebne jest, aby utworzyć użytkownika i bazę danych , to łatwiej jest po prostu wykorzystać do POSTGRES_USER
, POSTGRES_PASSWORD
i POSTGRES_DB
zmiennych środowiskowych:
docker run -e POSTGRES_USER=docker -e POSTGRES_PASSWORD=docker -e POSTGRES_DB=docker library/postgres
lub z plikiem Dockerfile:
FROM library/postgres
ENV POSTGRES_USER docker
ENV POSTGRES_PASSWORD docker
ENV POSTGRES_DB docker
dla zdjęć starszych niż 23 lipca 2015 r
Z dokumentacji obrazu postgres Docker wynika, że tak
[...] pobierze dowolny skrypt * .sh znaleziony w tym katalogu [ /docker-entrypoint-initdb.d
] w celu przeprowadzenia dalszej inicjalizacji przed uruchomieniem usługi
Ważne jest tutaj „przed uruchomieniem usługi” . Oznacza to, że skrypt make_db.sh zostanie wykonany przed uruchomieniem usługi postgres, dlatego komunikat o błędzie „nie można połączyć się z bazą danych postgres” .
Następnie pojawia się kolejna przydatna informacja:
Jeśli musisz wykonać polecenia SQL w ramach inicjalizacji, wysoce zalecane jest użycie trybu pojedynczego użytkownika Postgres.
Zgadzam się, że na pierwszy rzut oka może to być nieco tajemnicze. Mówi, że skrypt inicjujący powinien uruchomić usługę postgres w trybie pojedynczym przed wykonaniem swoich działań. Możesz więc zmienić skrypt make_db.ksh w następujący sposób i powinien on przybliżyć cię do tego, co chcesz:
UWAGA , ostatnio zmieniło się to w następującym zatwierdzeniu . Będzie to działać z najnowszą zmianą:
export PGUSER=postgres
psql <<- EOSQL
CREATE USER docker;
CREATE DATABASE docker;
GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
EOSQL
Wcześniej --single
wymagane było użycie trybu:
gosu postgres postgres --single <<- EOSQL
CREATE USER docker;
CREATE DATABASE docker;
GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
EOSQL
gosu postgres postgres --single < /tmp/somefile.sql