EDIT - з 23 липня 2015 року
Офіційний Postgres докер зображення буде запускати .sql
скрипти знаходяться в /docker-entrypoint-initdb.d/
папці.
Отже, все, що вам потрібно, це створити наступний скрипт sql:
init.sql
CREATE USER docker;
CREATE DATABASE docker;
GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
і додайте його у свій 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 , отже, повідомлення про помилку "не вдалося підключитися до постгресів бази даних" .
Після цього з'являється ще одна корисна інформація:
Якщо вам потрібно виконати команди 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
gosu postgres postgres --single < /tmp/somefile.sql