Инициализировать базу данных postgres (без использования /docker-entrypoint-initdb.d) - PullRequest
0 голосов
/ 27 июня 2019

Я пытаюсь инициализировать базу данных без использования каталога точки входа .

Вот минимальный Dockerfile:

FROM postgres:latest

POSTGRES_DB db
POSTGRES_USER user
POSTGRES_PASSWORD password

ADD db.sql /directory/
ADD script.sh /directory/

CMD ["sh", "/directory/script.sh"] 
# Or ENTRYPOINT ["/directory/script.sh"]?

И script.sh:

psql -d db -U user < /directory/db.sql

Это не работает, потому что postgres не работает при запуске скрипта.

Как запустить db.sql без использования /docker-entrypoint-initdb.d?

1 Ответ

1 голос
/ 27 июня 2019

Если вы посмотрите на стандартный postgres сценарий точки входа изображения , механизм поддержки каталога /docker-entrypoint-initdb.d довольно сложен: ему нужно загрузить каталог базы данных и исходных пользователя и базу данных, затем он запустится сервер базы данных в фоновом режиме и выполняет все в этом каталоге, и, наконец, запускает базу данных по-настоящему. Если вы пытаетесь повторить эту настройку, вы должны выполнить все эти шаги самостоятельно.

Есть и другие способы настройки базы данных. Вы можете создать пустую базу данных, а затем запустить миграции вашего приложения в обычном режиме, чтобы создать исходную схему. Если у вас есть файл SQL, который вы обычно запускаете для базы данных с клиентским инструментом psql, вы можете сделать то же самое с Docker

docker run -d -p 5432:5432 --name postgres postgres:12
psql -h localhost < db.sql
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...