Создайте базу данных, затем таблицу с помощью dockerfile - PullRequest
0 голосов
/ 31 августа 2018

Я использую Postgres и ищу создание базы данных, а затем таблицы после создания контейнера. Прямо сейчас я использую файл dockerfile и файл init.sql. База данных создается, но таблица создается в базе данных postgres по умолчанию. Как получить новую базу данных по умолчанию или, по крайней мере, создать таблицу в правильной базе данных? Спасибо

Dockerfile
FROM library/postgres
COPY init.sql /docker-entrypoint-initdb.d/

init.sql
CREATE DATABASE myApp;
CREATE TABLE session(sessionguid UUID NOT NULL, created text NOT NULL, sessionlife integer NOT NULL);

Ответы [ 2 ]

0 голосов
/ 31 августа 2018

Как уже упоминал @Roman Konoval, вы можете использовать переменную POSTGRES_DB env для создания базы данных.

Вот соответствующий фрагмент документации (см. Раздел «Переменные среды»):

POSTGRES_DB

Эта необязательная переменная среды может использоваться для определения другого имени для базы данных по умолчанию, которая создается при первом запуске образа. Если он не указан, будет использовано значение POSTGRES_USER

Затем, чтобы создать таблицу или выполнить какой-либо SQL-импорт (расширить postgres image: https://docs.docker.com/samples/library/postgres/#how-to-extend-this-image).

Ваш dockerfile должен выглядеть так:

FROM library/postgres
COPY start.sh /docker-entrypoint-initdb.d/start.sh

start.sh

#!/bin/sh
psql -h localhost -U user -W -d database_name -f /path/to/init.sql

когда вы запускаете свой контейнер, вам нужно смонтировать скрипт sql в /path/to/init.sql следующим образом:

$ docker run my_postgress_image -e "POSTGRES_DB=database_name" -v ./init.sql:/path/to/init.sql
0 голосов
/ 31 августа 2018

Существует набор переменных, которые управляют такими вещами, как имя пользователя и имя базы данных, которая создается автоматически. Вот соответствующая часть документации (см. Environment Variables раздел):

POSTGRES_DB

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

Просто укажите это как переменную окружения в команде run или в Dockerfile:

ENV POSTGRES_DB myApp
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...