Способ проверить Oracle закончил sql - PullRequest
0 голосов
/ 18 мая 2018

У меня есть кластер Docker Compose, и один из контейнеров - Oracle 12c.Существует файл schema.sql для инициализации БД.Я хотел бы, чтобы мое приложение ожидало, пока БД не выполнит все sql.Как я могу сделать это автоматически с помощью bash?

Большое спасибо за любые предложения!

1 Ответ

0 голосов
/ 18 мая 2018

Здесь есть много объяснений, но я свяжу один из моих предыдущих ответов для аналогичной проблемы - шаги на самом деле те же, потому что отличаются только служба базы данных и фон.

1) Во-первых, вы должны предоставить bash-скрипт, который будет ждать ответа службы через http.В базах данных это обычно происходит, когда БД готова к работе и все инициализации выполнены.

сценарий wait-for-it.sh , написанный vishnubob в его wait-it-it repo @ github.

2) Во-вторых, вы должны поместить этот скрипт в каждый контейнер, для которого требуется ваша БД.

3) В-третьих, вы указываете entrypointв вашем файле компоновки, который выполнит сценарий ожидания до того, как фактический command запустит ваш сервис.

пример точки входа (как ссылка на ответ, на который я ссылаюсь)

docker-entrypoint.sh:

#!/bin/bash
set -e
sh -c './wait-for-it.sh oracle:3306 -t 30'
exec "$@"

Все эти шаги подробно объяснены здесь, в сценарии 2 , учтите ссылку на мой другой ответ внутри ответа, на который я указываю здесь,Эта проблема является очень распространенной проблемой для начинающих и требует много объяснений, поэтому я не могу опубликовать все это здесь.

примечание здесь относительно depends_on, которое, как вы думаете, является нативнымрешение этой проблемы из docker - в состоянии docs он только ждет, пока контейнер не запустится, но фактически не завершил свои внутренние задания - docker не знает, сколько еще нужно сделать.

...