REDIGERA – sedan 23 juli 2015
Den officiella postgres docker-bilden kommer att köra .sql
skript som finns i /docker-entrypoint-initdb.d/
mapp.
Så allt du behöver är att skapa följande sql-skript:
init.sql
CREATE USER docker;
CREATE DATABASE docker;
GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
och lägg till den i din Dockerfile:
Dockerfil
FROM library/postgres
COPY init.sql /docker-entrypoint-initdb.d/
Men sedan den 8 juli 2015, om allt du behöver är att skapa en användare och databas , det är lättare att bara använda POSTGRES_USER
, POSTGRES_PASSWORD
och POSTGRES_DB
miljövariabler:
docker run -e POSTGRES_USER=docker -e POSTGRES_PASSWORD=docker -e POSTGRES_DB=docker library/postgres
eller med en Dockerfil:
FROM library/postgres
ENV POSTGRES_USER docker
ENV POSTGRES_PASSWORD docker
ENV POSTGRES_DB docker
för bilder äldre än 23 juli 2015
Från dokumentationen av postgres Docker-bilden sägs det att
[...] kommer det att hämta alla *.sh-skript som finns i den katalogen [
/docker-entrypoint-initdb.d
] för att göra ytterligare initiering innan du startar tjänsten
Det som är viktigt här är "innan du startar tjänsten" . Det betyder att ditt skript make_db.sh kommer att köras innan postgres-tjänsten skulle startas, därför felmeddelandet "kunde inte ansluta till databasen postgres" .
Efter det finns det ytterligare en användbar information:
Om du behöver utföra SQL-kommandon som en del av din initiering, rekommenderas användningen av Postgres enanvändarläge starkt.
Håller med om att detta kan vara lite mystiskt vid första titt. Vad det står är att ditt initialiseringsskript ska starta postgres-tjänsten i singelläge innan du gör dess åtgärder. Så du kan ändra din make_db.ksh skript enligt följande och det borde komma dig närmare vad du vill:
OBS , detta har nyligen ändrats i följande commit. Detta kommer att fungera med den senaste ändringen:
export PGUSER=postgres
psql <<- EOSQL
CREATE USER docker;
CREATE DATABASE docker;
GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
EOSQL
Tidigare användes --single
läge krävdes:
gosu postgres postgres --single <<- EOSQL
CREATE USER docker;
CREATE DATABASE docker;
GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
EOSQL