【问题标题】:Does Docker support restarting containers every X secondsDocker 是否支持每 X 秒重启一次容器
【发布时间】:2016-11-14 17:45:11
【问题描述】:

我有一个保持两个数据源同步的 Logstash 容器。当它运行时,它会查询一个数据库中的非同步条目并将它们发布到另一个数据库中。我想每隔 10 秒运行一次这个容器。

我一直在做的是指定--restart=always,这样当容器退出时,它会自行重启,大约需要 5 秒,这对于这个用例来说有点太频繁了。

Docker 是否支持我想要实现的目标(在重新启动之间等待 X 秒,或任何类型的调度)还是应该删除重新启动策略并使用 cron 安排它每 10 秒运行一次?

【问题讨论】:

    标签: docker cron scheduled-tasks restart


    【解决方案1】:

    如果您的容器成功退出,它将立即以--restart=always 重新启动

    在每次重新启动之前添加一个不断增加的延迟(是之前延迟的两倍,从 100 毫秒开始),以防止服务器泛滥。这意味着守护进程将等待 100 毫秒,然后等待 200 毫秒、400、800、1600 等等,直到达到 on-failure 限制,或者当您 docker stop 或 docker rm -f 容器时。

    我猜这是你的部分:

    如果容器重新启动成功(容器启动并运行至少 10 秒),则延迟重置为其默认值 100 毫秒。

    你可以做的是:

    • 每 10 秒使用 cron 重新启动容器
    • 在容器内配置一个 cron 并每 10 秒启动一次 logstash
    • 使用 shell 脚本,在循环中启动 logstash 然后休眠 10
    • 也许logstash已经内置了类似的东西? (我知道例如 jdbc-input-plugin 有一些调度参数)

    【讨论】:

    • 我将使用 cron 重新启动。但我也喜欢在docker-entrypoint.sh中存在logstash后休眠10秒,然后退出容器,这样当它立即重启时会经过10秒。我真诚地相信并支持容器应该尽可能简单,做尽可能少的事情,所以我不希望在我的 Logstash 容器中使用 cron,而且我无法安排我正在使用的 Logstash 的输入/输出插件.
    • 我同意你的看法,我的一些建议显然是不好的做法,我只是想尽可能详尽。
    • 您可以设置一个单独的链接容器来启动 Logstash,管理计划并在它没有恢复时报告。通过这种方式,您可以保持使用容器的可移植性和主机抽象优势。另一种选择是将 Logstash 设置为服务器并按计划对其运行查询,这也可能会增加一些抽象优势。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 2018-03-01
    • 2013-07-29
    • 2020-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多