Существует docker inspect
, который дает вам подробную информацию об одном контейнере.
Возможно, вас заинтересует значение 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
РЕДАКТИРОВАТЬ:
с помощью docker ps
(Предполагается, что время создания = время начала. Что не работает, если вы останавливаете и запускаете контейнеры. docker ps дает только RunningFor
и 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