如何在docker ps中以自定义格式显示容器创建时长?
问题:Docker ps自定义格式中显示创建时长而非具体日期
我在~/.docker/config.json中配置了自定义的容器列表格式:
{ "psFormat": "table {{.ID}}\\t{{.Image}}\\t{{.CreatedAt}}\\t{{.Status}}\\t{{.Ports}}\\t{{.Names}}" }
当前CreatedAt列显示的是具体的创建日期:
CREATED AT 2023-05-21 04:26:47 +0700 +07
但我希望显示容器创建的相对时长,比如:
CREATED About a minute ago
查阅Docker官方文档后,未找到直接通过psFormat配置实现该效果的方法。
解决方案
Docker CLI的自定义模板字段中没有直接提供输出相对创建时间的选项,因为相对时间是客户端实时计算的动态值,而CreatedAt属于容器的静态元数据(存储的绝对时间)。可以通过以下两种方式实现需求:
方法1:使用Shell函数封装处理
编写一个Shell函数,对docker ps的输出进行二次处理,将绝对时间转换为相对时长。将以下代码添加到你的~/.bashrc或~/.zshrc配置文件中:
docker-ps() { docker ps --format "table {{.ID}}\t{{.Image}}\t{{.CreatedAt}}\t{{.Status}}\t{{.Ports}}\t{{.Names}}" | awk ' NR==1 { sub(/CREATED AT/, "CREATED"); print; next } NR>1 { cmd = "date -d \""$3" "$4" "$5"\" +%s" cmd | getline created_ts close(cmd) now_ts = systime() diff = now_ts - created_ts if (diff < 60) { rel_time = "Just now" } else if (diff < 3600) { mins = int(diff / 60) rel_time = mins " minute" (mins > 1 ? "s" : "") " ago" } else if (diff < 86400) { hours = int(diff / 3600) rel_time = hours " hour" (hours > 1 ? "s" : "") " ago" } else { days = int(diff / 86400) rel_time = days " day" (days > 1 ? "s" : "") " ago" } # 替换原日期列内容并整理格式 $3 = $4 = $5 = "" $0 = $0 rel_time gsub(/\t+/, "\t") print } ' }
保存配置后,执行source ~/.bashrc(或对应的zsh配置文件)使函数生效,之后直接输入docker-ps即可看到包含相对创建时长的容器列表。
方法2:使用默认输出(简单场景)
如果不需要自定义其他列的格式,直接执行docker ps默认命令即可,它会自动显示相对时间的CREATED列,无需额外配置。
内容的提问来源于stack exchange,提问作者user1829232
相关产品推荐
相关产品推荐

