РЕДАКТИРАНЕ - от 23 юли 2015 г.
Официалното postgres docker изображение ще изпълнява .sql
скриптове, намерени в /docker-entrypoint-initdb.d/
папка.
Така че всичко, от което се нуждаете, е да създадете следния sql скрипт:
init.sql
CREATE USER docker;
CREATE DATABASE docker;
GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
и го добавете във вашия Dockerfile:
Dockerfile
FROM library/postgres
COPY init.sql /docker-entrypoint-initdb.d/
Но от 8 юли 2015 г., ако всичко, от което се нуждаете, е да създадете потребител и база данни , по-лесно е просто да използвате POSTGRES_USER
, POSTGRES_PASSWORD
и POSTGRES_DB
променливи на средата:
docker run -e POSTGRES_USER=docker -e POSTGRES_PASSWORD=docker -e POSTGRES_DB=docker library/postgres
или с Dockerfile:
FROM library/postgres
ENV POSTGRES_USER docker
ENV POSTGRES_PASSWORD docker
ENV POSTGRES_DB docker
за изображения, по-стари от 23 юли 2015 г.
От документацията на изображението на postgres Docker се казва, че
[...] той ще източник на всеки *.sh скрипт, намерен в тази директория [
/docker-entrypoint-initdb.d
], за да направите допълнителна инициализация преди стартиране на услугата
Това, което е важно тук, е „преди стартиране на услугата“ . Това означава вашият скрипт make_db.sh ще се изпълни преди услугата postgres да бъде стартирана, следователно съобщението за грешка „не може да се свърже с базата данни postgres“ .
След това има още една полезна информация:
Ако трябва да изпълнявате SQL команди като част от вашата инициализация, силно се препоръчва използването на режим за един потребител на Postgres.
Съгласен съм, че това може да бъде малко мистериозно на пръв поглед. Това, което казва, е, че вашият скрипт за инициализация трябва да стартира услугата postgres в единичен режим, преди да извърши своите действия. Така че можете да промените своя make_db.ksh скрипт, както следва и той трябва да ви доближи до това, което искате:
ЗАБЕЛЕЖКА , това се промени наскоро в следния комит. Това ще работи с последната промяна:
export PGUSER=postgres
psql <<- EOSQL
CREATE USER docker;
CREATE DATABASE docker;
GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
EOSQL
Преди това, използването на --single
беше необходим режим:
gosu postgres postgres --single <<- EOSQL
CREATE USER docker;
CREATE DATABASE docker;
GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
EOSQL