如何在未安装Docker的容器内部查看容器运行时长?
如何在未安装Docker的容器内查看容器运行时长?
无效方法说明
- 使用
uptime命令:返回的是宿主机的运行时长,无法获取容器自身的运行时间 - 使用
last reboot命令:会尝试读取/var/log/wtmp文件,但容器内通常无该文件或无有效输出 - 使用
docker ps命令:需要容器内安装Docker环境,不符合当前场景
可行方法
方法1:通过proc文件系统计算容器运行时长
容器的生命周期与内部PID为1的进程绑定,可通过该进程的启动时间推导容器运行时长,执行以下命令直接输出易读结果:
awk '{printf "容器已运行 %.2f 秒\n", ($1*100 - $2)/100}' <(cat /proc/uptime) <(cat /proc/1/stat | awk '{print $22}')
原理:/proc/uptime第一个值是宿主机运行秒数,乘以100得到时钟滴答数;/proc/1/stat第22个值是PID1启动时的时钟滴答数,两者差值除以100即为容器运行秒数。
方法2:查看容器启动时间并计算时长
通过转换PID1进程的启动时间为可读格式,再计算与当前时间的差值:
# 获取容器启动的UNIX时间戳 start_time=$(($(date +%s) - $(($(cut -d' ' -f22 /proc/1/stat) / $(getconf CLK_TCK))))) # 输出启动时间和运行时长 echo "容器启动时间: $(date -d @$start_time)" echo "已运行时长: $(printf '%dh%dm%ds' $(($(date +%s) - $start_time)/3600) $(($((date +%s) - $start_time)%3600/60)) $(($((date +%s) - $start_time)%60)))"
方法3:用ps命令查看PID1启动时间(若容器内有ps)
如果容器内安装了ps工具,可直接查看PID1的启动时间并计算时长:
# 获取PID1的启动时间字符串 start_str=$(ps -o lstart= -p 1) # 转换为时间戳并计算时长 start_ts=$(date -d "$start_str" +%s) now_ts=$(date +%s) duration=$((now_ts - start_ts)) echo "容器启动时间: $start_str" echo "已运行时长: $(printf '%d天%dh%dm%ds' $((duration/86400)) $((duration%86400/3600)) $((duration%3600/60)) $((duration%60)))"
内容的提问来源于stack exchange,提问作者WurmD
相关产品推荐
相关产品推荐

