EDIT - siden 23. juli 2015
Det officielle postgres docker-billede vil køre .sql
scripts fundet i /docker-entrypoint-initdb.d/
folder.
Så alt hvad du behøver er at oprette følgende sql-script:
init.sql
CREATE USER docker;
CREATE DATABASE docker;
GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
og tilføj det i din Dockerfile:
Dockerfil
FROM library/postgres
COPY init.sql /docker-entrypoint-initdb.d/
Men siden den 8. juli 2015, hvis alt hvad du behøver er at oprette en bruger og database , er det nemmere bare at gøre brug af POSTGRES_USER
, POSTGRES_PASSWORD
og POSTGRES_DB
miljøvariabler:
docker run -e POSTGRES_USER=docker -e POSTGRES_PASSWORD=docker -e POSTGRES_DB=docker library/postgres
eller med en Dockerfile:
FROM library/postgres
ENV POSTGRES_USER docker
ENV POSTGRES_PASSWORD docker
ENV POSTGRES_DB docker
for billeder ældre end 23. juli 2015
Fra dokumentationen af postgres Docker-billedet siges det, at
[...] den vil hente ethvert *.sh-script, der findes i den mappe [/docker-entrypoint-initdb.d
] for at udføre yderligere initialisering, før du starter tjenesten
Det, der er vigtigt her, er "før du starter tjenesten" . Dette betyder dit script make_db.sh vil blive udført før postgres-tjenesten ville blive startet, derfor fejlmeddelelsen "kunne ikke oprette forbindelse til databasen postgres" .
Derefter er der en anden nyttig information:
Hvis du har brug for at udføre SQL-kommandoer som en del af din initialisering, anbefales det stærkt at bruge Postgres enkeltbrugertilstand.
Enig, at dette kan være lidt mystisk ved første kig. Det, der står, er, at dit initialiseringsscript skal starte postgres-tjenesten i enkelttilstand, før du udfører sine handlinger. Så du kan ændre din make_db.ksh script som følger, og det skulle bringe dig tættere på det, du ønsker:
BEMÆRK , dette har ændret sig for nylig i følgende commit. Dette vil fungere med den seneste ændring:
export PGUSER=postgres
psql <<- EOSQL
CREATE USER docker;
CREATE DATABASE docker;
GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
EOSQL
Tidligere brugte --single
tilstand var påkrævet:
gosu postgres postgres --single <<- EOSQL
CREATE USER docker;
CREATE DATABASE docker;
GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
EOSQL