Создайте базу данных перед раскруткой док-контейнера - PullRequest
1 голос
/ 01 мая 2019

У меня есть файл docker compose с контейнером приложения и контейнером postgres.

Приложение зависит от контейнера postgres.

Я бы хотел, чтобы контейнер приложения начал подключаться к postgres и запускать скрипт для создания там базы данных. Как я могу сделать это в docker compose? Есть ли способ запустить что-то в середине зависимости?

Или я должен сделать это, когда я подключаюсь к серверу через ssh, чтобы запустить docker compose вверх и вниз на этапе развертывания. Таким образом, мне также нужно каким-то образом установить PSQL на сервере. Я бы предпочел первый.

Можете ли вы указать мне правильное направление?

Ответы [ 2 ]

2 голосов
/ 01 мая 2019

Я бы хотел, чтобы контейнер приложения начал подключаться к postgres и запустить скрипт для создания там базы данных.

Этого можно добиться, подключив (SQL) сценарии в папку /docker-entrypoint-initdb.d контейнера Postgres (см. документацию по образу - сценарии инициализации). При этом вашему приложению не нужно подключаться к контейнеру PostgreSQL, но контейнер делает все это самостоятельно.

Тем не менее, общая проблема заключается в том, что ваше приложение может немедленно попытаться подключиться к PostgreSQL, прежде чем оно будет готово принимать подключения и ваше приложение аварийно завершит работу. Вы можете избежать этого, либо внедрив в своем приложении некоторый механизм try-catch для ожидания готовности PostgreSQL, либо изменив точку входа контейнера вашего приложения, т.е. sleep 10 && [run_your_app].

1 голос
/ 02 мая 2019

Объявляя переменную среды POSTGRES_DB, вы можете указать Postgres создать пустую базу данных при запуске и использовать имя env vars.

version: '3.5'

services:

  db:
    image: postgres:11.2-alpine
    restart: always
    environment:
      POSTGRES_DB: myDB
      POSTGRES_PASSWORD: myPassword
      POSTGRES_USER: myUser
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...