Date

將 docker 容器日期轉換為自紀元以來的毫秒數

  • January 4, 2019

我正在嘗試找到長期執行的 docker 容器。

第一次執行docker ps --format '{{.RunningFor}}'返回類似

About a minute ago
11 minutes ago

這對於機器加工完全沒用。我找不到任何方法來改變它,並且 JSON 輸出中的值相同。

接下來我嘗試了docker ps --format '{{.CreatedAt}}'。這會返回像2019-01-03 12:49:46 +0000 UTC.

問題是這不是 ISO 8601 也不是任何其他常見格式。更糟糕的是,試圖用date給出的解析它:

date --date="$DATE"
date: invalid date ‘2019-01-03 12:49:46 +0000 UTC’

我希望必須有一種更好的方法來獲得一個紀元毫秒值,而不是使用等手動處理該值awk,但我找不到它。最好的事情是這樣的功能{{epoch .CreatedAt}}(類似於{{lower .Name}}

docker inspect <container-name>它為您提供有關一個容器的詳細資訊。

您可能對State.StartedAt的值感興趣

"State": {
           "Status": "running",
           "Running": true,
           "Paused": false,
           "Restarting": false,
           "OOMKilled": false,
           "Dead": false,
           "Pid": 1234,
           "ExitCode": 0,
           "Error": "",
           "StartedAt": "2018-12-20T12:41:54.281709415Z",
           "FinishedAt": "2018-12-20T12:41:28.781748517Z"
       },

要檢查所有正在執行的容器,您可以執行:

docker container ls --format="{{.Names}}" | xargs -n1 docker container inspect

JSON 輸出:安裝jq ( apt-get install jq) 後,您可以僅過濾容器名稱和 StartedAt

docker container ls --format="{{.Names}}" | xargs -n1 docker container inspect | jq '.[] | {name: .Name, uptime: .State.StartedAt}'

**CSV 輸出:(**分號分隔,按年齡排序)

docker container ls --format="{{.Names}}" | xargs -n1 docker container inspect --format='{{.Name}};{{.State.StartedAt}}' | sort -k2,1

編輯:

using docker ps (這是假設創建時間=開始時間。如果您停止並啟動容器,這將不起作用。docker ps 只給出RunningForand Status,兩者都是人類可讀的“5 週前”樣式。使用docker inspect方法來獲取更可靠實際執行時間。)

docker ps --format="{{.CreatedAt}} {{.Names}}" | sort -k1,1

編輯2:

事實證明,您可以使用 go 和 docker api 完成所有這些操作。這是我剛剛編寫的一個簡單展示:

您可以獲取二進制連結:或者根據自己的喜好更改程式碼並自行編譯連結

結果將如下所示:

container_age for API v1.37
DURATION ID         NAME
50h      1234567890 /jenkins
362h     1234567891 /elasticsearch

引用自:https://unix.stackexchange.com/questions/492279