在docker容器中运行的应用程序如何检测docker主机重新启动?

在docker容器中运行的应用程序如何检测docker主机重新启动?,docker,monitoring,uptime,Docker,Monitoring,Uptime,我有一个应用程序(Django)在云提供商的docker容器中运行。出于各种原因,了解主机本身何时重新启动并将此事件保存在某个位置(例如数据库)对我来说非常有用。显然,很容易检测到应用程序本身何时启动,但这可能是由主机重新启动以外的原因造成的。 理论上我可以理解这个术语,但这也不一定意味着主机重新启动 像往常一样,在写这个问题时,我意识到我可以调用uptime并在必要时传递/proc/uptime,但这是最好的方式吗?没有必要传递/proc/uptime,它应该已经在容器中可用,并且没有名称空间

我有一个应用程序(Django)在云提供商的docker容器中运行。出于各种原因,了解主机本身何时重新启动并将此事件保存在某个位置(例如数据库)对我来说非常有用。显然,很容易检测到应用程序本身何时启动,但这可能是由主机重新启动以外的原因造成的。 理论上我可以理解这个术语,但这也不一定意味着主机重新启动


像往常一样,在写这个问题时,我意识到我可以调用
uptime
并在必要时传递
/proc/uptime
,但这是最好的方式吗?

没有必要传递
/proc/uptime
,它应该已经在容器中可用,并且没有名称空间或隔离:

$ cat /proc/uptime 
1545872.40 11868963.08

$ docker run -it --rm alpine cat /proc/uptime
1545882.60 11869040.00
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