Как правильно запустить Docker-контейнер на интервале? - PullRequest
0 голосов
/ 27 сентября 2019

В настоящее время я запускаю службу, которая раскручивает виртуальные испытательные стенды в Openstack, которые имеют установленное время истечения.Этот сервис в настоящее время работает в док-контейнере.Однако, чтобы отделить очистку (обработку времени истечения), у меня есть отдельный скрипт, который действует как независимый клиент и выдает запросы на удаление в службу.В настоящее время они живут в одном и том же контейнере.

Точка входа в докер выглядит примерно так

#!/bin/bash
#
# Used by Docker in order to run both the server and the
# cleaner process at the same time.  When server dies
# or is killed, cleaner is killed as well to ensure that
# the container exits.
#

# turn on bash's job control
set -m

# Start the primary process and put it in the background
poetry run waitress-serve --port=5000 --threads=8 --call "server:app.create_app" &

# Write cleaner.cfg file
cat << EOF > /etc/cleaner.ini
[conf]
host: 127.0.0.1
port: 5000
EOF

# Start the helper process
poetry run cleaner -c /etc/cleaner.ini &

# now we bring the primary process back into the foreground
# and leave it there
fg %1

# Once the primary process dies, lets kill the helper
# script
kill %2

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

Я хотел бы разбить его в свой собственный контейнер.Я хотел бы удалить сон из скрипта Python Cleaner и сделать так, чтобы скрипт вызывался с интервалом.Я понимаю, что Cron не работает хорошо в контексте докера:

  1. Cron Daemon будет отдельным процессом
  2. Как обработать стандартный вывод для поддержки docker logs ...?
  3. Как cron обрабатывает зависшие процессы?

Принимая это во внимание.Мне бы очень хотелось, чтобы аспект Cron находился снаружи контейнера докера.Просто docker run каждые 15 минут.Кто-нибудь сделал что-то подобное?Есть ли нативная поддержка?И самое главное, есть ли способ сохранить / прикрепить журналы между прогонами, чтобы журналы не терялись при каждом вращении?Google не указал мне на какие-либо полезные ресурсы.Спасибо.

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