Date
將 docker 容器日期轉換為自紀元以來的毫秒數
我正在嘗試找到長期執行的 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
) 後,您可以僅過濾容器名稱和 StartedAtdocker 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 只給出RunningFor
andStatus
,兩者都是人類可讀的“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