You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 05:00:34