2016-05-02 1 views
1

Попытка сделать Dockerfile для postgres db need для моего приложения.Настройка файла docker с postgres

Dockerfile

FROM postgres:9.4 
RUN mkdir /sql 
COPY src/main/resources/sql_scripts/* /sql/ 
RUN psql -f /sql/create_user.sql 
RUN psql -U user -W 123 -f create_db.sql 
RUN psql -U user -W 123 -d school_ats -f create_tables.sql 

пробег

docker build . 

результат:

Sending build context to Docker daemon 3.367 MB 
Step 1 : FROM postgres:9.4 
---> 6196bca94565 
Step 2 : RUN mkdir /sql 
---> Using cache 
---> 6f57c1e759b7 
Step 3 : COPY src/main/resources/sql_scripts/* /sql/ 
---> Using cache 
---> 3b496bfb28cd 
Step 4 : RUN psql -a -f /sql/create_user.sql 
---> Running in 33b2230a12fa 
psql: could not connect to server: No such file or directory 
    Is the server running locally and accepting 
    connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"? 
The command '/bin/sh -c psql -a -f /sql/create_user.sql' returned a non-zero code: 2 

Как я могу указать дб в докер для моего проекта?

+1

Основание dockerfile 'Postgres: 9.4' фактически не запустить Postgres, пока не будет запущена точка входа. Сначала вам нужно запустить контейнер из базового изображения. –

ответ

3

При построении постгерра изображения докеров не работает. База данных запускается при запуске контейнера, после этого могут быть выполнены любые файлы sql. Простейшее решение поместить ваши SQL-файлы в специальный каталог:

FROM postgres:9.4 
COPY *.sql /docker-entrypoint-initdb.d/ 

При загрузке сценария запуска выполнит все файлы из этой директории. Вы можете прочитать об этом в документах https://hub.docker.com/_/postgres/ в разделе Как продлить это изображение.

Кроме того, если вам нужен другой пользователь, вы должны установить переменные окружения POSTGRES_USER и POSTGRES_PASSWORD. Это проще, чем использование пользовательских скриптов для создания пользователя.

+0

В соответствии с последними рекомендациями мы предпочитаем использовать 'COPY' над' ADD'. –

+0

Правда, исправлено это :) – jazgot

1

Как сказано выше, во время сборки изображения вы не получаете запущенного экземпляра Postgres.

Вы можете использовать несколько иной подход. Вместо того, чтобы пытаться самостоятельно выполнять SQL-скрипты, вы можете скопировать их в каталог /docker-entrypoint-initdb.d/. Они будут выполняться при запуске контейнера.

Посмотрите, как Postgres: 9,4 изображение является сборка:

Также в вашем Dockerfile использовать переменные, чтобы установить детали базы данных:

  • POSTGRES_DB
  • POSTGRES_USER
  • POSTGRES_PASSWORD