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