【问题标题】:How to stop docker container automatically?如何自动停止 docker 容器?
【发布时间】:2020-07-01 21:30:51
【问题描述】:

我试图在 1 小时后自动停止 docker 容器。我的意思是,如果没有进程进行或容器空闲 1 小时,则停止该容器。这可以在 Dockfile 中以编程方式完成吗?任何想法都会有所帮助。

提前致谢。

【问题讨论】:

标签: docker nginx dockerfile


【解决方案1】:

Dockerfile 支持的最适合您的问题的解决方案是 HEALTHCHECK 指令,例如HEALTHCHECK [OPTIONS] CMD command 。您可以在此处指定间隔(例如 1 小时)和超时。

--interval=DURATION (default: 30s)
--timeout=DURATION (default: 30s)
--start-period=DURATION (default: 0s)
--retries=N (default: 3)

除此之外,您还必须创建由cronjob 每 1 小时触发一次的 custom shell script。在此脚本中,您将停止前台进程并停止正在运行的容器。

【讨论】:

  • 实际上,我使用 NGINX 作为反向代理。条件是,如果过去 1 小时内没有传入的 http 请求,那么我需要停止该容器。
  • 可以通过解析nginx的访问日志来实现。每个请求都有时间戳(或日期和时间),您可以轻松地获取这些时间戳。
  • 谢谢。任何参考文档或链接?
  • NGINX Access Logs 上查看本教程除此之外,我建议编写简单的python 脚本从access.log 中提取日期/时间戳并将其与cronjobHEALTHCHECK 结合使用。这将是我的策略。
  • @JDGuide 听起来你做了边车部署——非常聪明!
【解决方案2】:

据我所知,这样的场景不是 docker 工作流程的一部分。

只要主进程还活着,容器就一直活着。当该项目(PID:1)退出(错误或成功)时,容器也会停止。

所以我看到的唯一方法是在您的程序中构建此逻辑(容器中的主进程)或将程序包装在一个 shell 脚本中,该脚本根据某些规则终止该进程(例如某个特定的没有日志条目时间)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-29
    相关资源
    最近更新 更多