EDIT – od 23. července 2015
Oficiální postgres docker image poběží .sql
skripty nalezené v /docker-entrypoint-initdb.d/
složka.
Vše, co potřebujete, je vytvořit následující skript SQL:
init.sql
CREATE USER docker;
CREATE DATABASE docker;
GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
a přidejte jej do svého Dockerfile:
Dockerfile
FROM library/postgres
COPY init.sql /docker-entrypoint-initdb.d/
Ale od 8. července 2015 pokud vše, co potřebujete, je vytvořit uživatele a databázi , je jednodušší jednoduše použít POSTGRES_USER
, POSTGRES_PASSWORD
a POSTGRES_DB
proměnné prostředí:
docker run -e POSTGRES_USER=docker -e POSTGRES_PASSWORD=docker -e POSTGRES_DB=docker library/postgres
nebo pomocí Dockerfile:
FROM library/postgres
ENV POSTGRES_USER docker
ENV POSTGRES_PASSWORD docker
ENV POSTGRES_DB docker
pro obrázky starší než 23. července 2015
Z dokumentace obrazu postgres Docker se říká, že
[...] bude zdrojovým kódem jakýkoli *.sh skript nalezený v tomto adresáři [
/docker-entrypoint-initdb.d
] pro provedení další inicializace před spuštěním služby
Zde je důležité „před spuštěním služby“ . To znamená váš skript make_db.sh bude spuštěna před spuštěním služby postgres, proto se zobrazí chybová zpráva "nelze se připojit k databázi postgres" .
Poté je tu další užitečná informace:
Pokud potřebujete spouštět příkazy SQL jako součást inicializace, důrazně se doporučuje použít režim jednoho uživatele Postgres.
Souhlasím, že to může být na první pohled trochu záhadné. Říká se, že váš inicializační skript by měl spustit službu postgres v jediném režimu, než provede své akce. Můžete tedy změnit svůj make_db.ksh skript takto a měl by vás přiblížit tomu, co chcete:
POZNÁMKA , to se nedávno změnilo v následujícím potvrzení. Toto bude fungovat s nejnovější změnou:
export PGUSER=postgres
psql <<- EOSQL
CREATE USER docker;
CREATE DATABASE docker;
GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
EOSQL
Dříve se používal --single
byl vyžadován režim:
gosu postgres postgres --single <<- EOSQL
CREATE USER docker;
CREATE DATABASE docker;
GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
EOSQL