【问题标题】:How can an application running in a docker container detect that the docker host rebooted?在 docker 容器中运行的应用程序如何检测到 docker 主机重新启动?
【发布时间】:2020-04-15 12:54:08
【问题描述】:

我有一个应用程序 (Django) 在云提供商的 docker 容器中运行。由于各种原因,知道主机本身何时重新启动并将此事件保存在某个地方对我很有用,例如一个数据库。显然,很容易检测到应用程序本身何时启动,但这可能是由主机重启以外的其他原因引起的。 理论上我可以捕获 SIGTERM 但这并不一定意味着主机重新启动。

像往常一样,在写这个问题时,我意识到我可以打电话给uptime 并在必要时通过/proc/uptime,但这是最好的方法吗?

【问题讨论】:

    标签: docker monitoring uptime


    【解决方案1】:

    不需要通过/proc/uptime,它应该已经在容器中可用并且没有命名空间或隔离:

    $ cat /proc/uptime 
    1545872.40 11868963.08
    
    $ docker run -it --rm alpine cat /proc/uptime
    1545882.60 11869040.00
    

    【讨论】:

      【解决方案2】:
      import time
      import subprocess
      
      def uptime():
          res = subprocess.check_output(
              # %Y is last data modification since Epoch
              # proc/1 is the first process started in docker, PID 1
              "stat --format=%Y -t /proc/1/cmdline",
              shell=True,
          )
          uptime_seconds_epoch = int(res.decode().strip())
          now_epoch = int(time.time())
          uptime_seconds = now_epoch - uptime_seconds_epoch
          
          return uptime_seconds
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多