如何正确地间隔运行Docker容器?

时间:2019-09-27 13:04:00

标签: docker cron containers

我目前正在运行一项服务,该服务在Openstack中旋转具有设置的到期时间的虚拟化测试平台。该服务当前在docker容器中运行。但是,要分离清理(到期时间处理),我有一个单独的脚本,该脚本充当独立的客户端并向服务发出删除请求。他们目前住在同一个容器中。

泊坞窗入口点看起来像这样

#!/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清洁程序脚本中删除睡眠,并让脚本在一定间隔内被调用。我了解Cron在docker上下文中的表现不佳:

  1. Cron Daemon将是单独的过程
  2. 如何处理stdout以支持docker logs ...
  3. cron如何处理挂起的进程?

考虑到这一点。我真的很想让“ Cron”方面来自docker容器之外。每15分钟只需docker run。有人做过这样的事情吗?有本地支持吗?最重要的是,是否有一种方法可以在两次运行之间保存/附加日志,以免每次旋转都不会丢失日志? Google没有指出我任何有用的资源。谢谢。

0 个答案:

没有答案