我有一个docker容器,该容器在debian和python脚本上使用uwsgi
运行一个简单的自定义下载服务器。将针对每个请求生成文件并将其保存在容器内。现在,我要定期删除服务器为过去的请求生成的旧文件。
到目前为止,我是通过主机上的 cronjob 实现清理的,
*/30 * * * * docker exec mycontainer /path/on/container/delete_old_files.sh
但这有一些缺点:
我更喜欢随docker容器一起推出的解决方案,并且也适用于docker容器背景下的更常规的定期任务。
是否有任何最佳做法?
python或uwsgi是否具有用于定期后台任务的简单机制?
我知道,我可以在容器中安装cron并安装到类似CMD ['sh', '-c', 'cron; uswgi <uswgi-options>... --wsgi-file server.py']
的地方,但这似乎有点笨拙,并且与docker philosopy背道而驰。
server.py
中的解决方案:
def cleanup():
# ...
threading.Timer(30*60, cleanup).start() # seconds...
cleanup()
# ... rest of the code here ...
看起来不错,但是我不确定它如何干扰uwsgi
自己的线程和处理。
这似乎是一个简单的问题,但不是。
答案 0 :(得分:0)
您应该不将实时数据存储在容器中。容器可能会有些脆弱,需要定期删除和重新启动(因为您忘记了一个选项;因为基础映像具有关键的安全修复程序),一旦发生这种情况,您将丢失容器中的所有数据。>
相反,您可以使用docker run -v
选项将数据存储在主机上的路径中。如果它们都在同一个地方,那么您可以进行一项cron工作来清理它们。在主机上运行cron可能是这里的正确解决方案,尽管原则上您可以有一个单独的专用cron容器来进行清理。