BEARBEITEN - seit dem 23. Juli 2015
Das offizielle Postgres-Docker-Image führt .sql
aus Skripte, die in /docker-entrypoint-initdb.d/
gefunden werden Mappe.
Sie müssen also nur das folgende SQL-Skript erstellen:
init.sql
CREATE USER docker;
CREATE DATABASE docker;
GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
und fügen Sie es Ihrem Dockerfile hinzu:
Dockerfile
FROM library/postgres
COPY init.sql /docker-entrypoint-initdb.d/
Aber seit dem 8. Juli 2015 wenn Sie nur noch einen Benutzer und eine Datenbank erstellen müssen , ist es einfacher, einfach den POSTGRES_USER
zu verwenden , POSTGRES_PASSWORD
und POSTGRES_DB
Umgebungsvariablen:
docker run -e POSTGRES_USER=docker -e POSTGRES_PASSWORD=docker -e POSTGRES_DB=docker library/postgres
oder mit einem Dockerfile:
FROM library/postgres
ENV POSTGRES_USER docker
ENV POSTGRES_PASSWORD docker
ENV POSTGRES_DB docker
für Bilder, die älter als der 23. Juli 2015 sind
Aus der Dokumentation des Postgres-Docker-Images heißt es, dass
[...] es wird jedes *.sh-Skript, das in diesem Verzeichnis [/docker-entrypoint-initdb.d
) gefunden wird, beziehen ], um weitere Initialisierungen durchzuführen, bevor der Dienst gestartet wird
Wichtig ist hier "vor dem Start des Dienstes" . Das bedeutet Ihr Skript make_db.sh wird ausgeführt, bevor der Postgres-Dienst gestartet wird, daher die Fehlermeldung "Verbindung zur Datenbank Postgres konnte nicht hergestellt werden" .
Danach gibt es eine weitere nützliche Information:
Wenn Sie im Rahmen Ihrer Initialisierung SQL-Befehle ausführen müssen, wird die Verwendung des Einzelbenutzermodus von Postgres dringend empfohlen.
Zugegeben, das kann auf den ersten Blick etwas mysteriös sein. Es besagt, dass Ihr Initialisierungsskript den Postgres-Dienst im Einzelmodus starten sollte, bevor es seine Aktionen ausführt. Sie könnten also Ihre make_db.ksh ändern Skript wie folgt und es sollte Sie dem, was Sie wollen, näher bringen:
HINWEIS , dies hat sich kürzlich im folgenden Commit geändert. Dies funktioniert mit der letzten Änderung:
export PGUSER=postgres
psql <<- EOSQL
CREATE USER docker;
CREATE DATABASE docker;
GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
EOSQL
Bisher die Verwendung von --single
Modus wurde benötigt:
gosu postgres postgres --single <<- EOSQL
CREATE USER docker;
CREATE DATABASE docker;
GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
EOSQL