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