Теория заключается в том, что хорошо ведущий себя контейнер должен уметь корректно обрабатывать, не запуская зависимости, потому что, несмотря на все усилия вашего планировщика контейнера, контейнеры могут приходить и уходить.Поэтому, если вашему приложению нужна БД, но в любой момент времени БД недоступна, она должна ответить рационально.Например, возврат 503 для HTTP-запроса или повторная попытка после задержки для запланированной задачи.
Хотя это теория и не всегда применима.В вашей ситуации, возможно, вам действительно нужно ваше приложение Vapor, чтобы дождаться появления Postgres, и в этом случае вы можете использовать скрипт-обертку, который опрашивает вашу БД и запускает ваше основное приложение только после того, как БД будет готова.
См. Этот предлагаемый скрипт-оболочку из документации Docker:
#!/bin/sh
# wait-for-postgres.sh
set -e
host="$1"
shift
cmd="$@"
until PGPASSWORD=$POSTGRES_PASSWORD psql -h "$host" -U "postgres" -c '\q'; do
>&2 echo "Postgres is unavailable - sleeping"
sleep 1
done
>&2 echo "Postgres is up - executing command"
exec $cmd
command: ["./wait-for-postgres.sh", "db", "vapor-app", "run"]