BEWERKEN - sinds 23 juli 2015
De officiële postgres docker-afbeelding zal .sql
uitvoeren scripts gevonden in de /docker-entrypoint-initdb.d/
map.
U hoeft dus alleen het volgende sql-script te maken:
init.sql
CREATE USER docker;
CREATE DATABASE docker;
GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
en voeg het toe aan je Docker-bestand:
Dockerbestand
FROM library/postgres
COPY init.sql /docker-entrypoint-initdb.d/
Maar sinds 8 juli 2015, als je alleen nog maar een gebruiker en database hoeft aan te maken , is het gemakkelijker om gewoon gebruik te maken van de POSTGRES_USER
, POSTGRES_PASSWORD
en POSTGRES_DB
omgevingsvariabelen:
docker run -e POSTGRES_USER=docker -e POSTGRES_PASSWORD=docker -e POSTGRES_DB=docker library/postgres
of met een Dockerfile:
FROM library/postgres
ENV POSTGRES_USER docker
ENV POSTGRES_PASSWORD docker
ENV POSTGRES_DB docker
voor afbeeldingen ouder dan 23 juli 2015
Uit de documentatie van de postgres Docker-afbeelding wordt gezegd dat
[...] het zal elk *.sh-script dat in die map wordt gevonden [
/docker-entrypoint-initdb.d
] om verdere initialisatie uit te voeren voordat de service wordt gestart
Wat hier belangrijk is, is "voordat de service wordt gestart" . Dit betekent dat uw script make_db.sh wordt uitgevoerd voordat de postgres-service zou worden gestart, vandaar de foutmelding "kon geen verbinding maken met database postgres" .
Daarna is er nog een ander nuttig stukje informatie:
Als u SQL-opdrachten moet uitvoeren als onderdeel van uw initialisatie, wordt het gebruik van de modus voor één gebruiker van Postgres ten zeerste aanbevolen.
Akkoord, dit kan op het eerste gezicht een beetje mysterieus zijn. Wat er staat, is dat je initialisatiescript de postgres-service in enkele modus moet starten voordat het zijn acties uitvoert. U kunt dus uw make_db.ksh . wijzigen script als volgt en het zou je dichter moeten brengen bij wat je wilt:
OPMERKING , dit is onlangs veranderd in de volgende commit. Dit werkt met de laatste wijziging:
export PGUSER=postgres
psql <<- EOSQL
CREATE USER docker;
CREATE DATABASE docker;
GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
EOSQL
Voorheen was het gebruik van --single
modus was vereist:
gosu postgres postgres --single <<- EOSQL
CREATE USER docker;
CREATE DATABASE docker;
GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
EOSQL