Как остановить запуск Docker-контейнера, если инициализация приложения не удалась? - PullRequest
0 голосов
/ 11 января 2019

У нас есть приложение-служба колб, которое подключается к базе данных mysql для получения данных. Это приложение фляги является сервером через gunicorn в док-контейнере. Для этого мы используем docker-compose.

Когда приложение запускается, мы устанавливаем соединение с базой данных. Если соединение с базой данных не удается (3 попытки), приложение не может инициализироваться и завершается. Но замечаю, что контейнер запускается. Как я могу заставить контейнер не запускаться также, когда мое приложение не запускается?

Ответы [ 3 ]

0 голосов
/ 11 января 2019

Если он действительно запускается (не при постоянном перезапуске), попробуйте добавить trap 'exit' ERR в начало сценария вашей точки входа.

0 голосов
/ 11 января 2019

Сначала вы должны сообщить docker-compose, что хотите, чтобы все контейнеры прекратили выполнение при выходе из вашего основного сервиса. Это делается с помощью --abort-on-container-exit аргумента командной строки. Скажем, если у вас есть 2 услуги:

докер-compose.yml

version: '3'
services:
  db:
    ...
  flask:
    ...

тогда командная строка будет выглядеть примерно так:

docker-compose up --exit-code-from flask --abort-on-container-exit

Таким образом, сообщение о том, что ваша служба flask является основной, и вы не хотите продолжать работу после ее выхода.

Во-вторых, вы настраиваете основной процесс flask (PID 1) на выход (предпочтительно с ненулевым кодом выхода), если ему не удается подключиться к базе данных. Вот и все.

0 голосов
/ 11 января 2019

использование restart:no Есть 3 варианта перезапуска политики.

- restart: no
- restart: always
- restart: on-failure
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...