Estou tentando encontrar contêineres docker de longa duração.
A primeira execução docker ps --format '{{.RunningFor}}'
retorna algo como
About a minute ago
11 minutes ago
que é completamente inútil para o processamento da máquina. Não consegui encontrar nenhuma maneira de alterar isso e o mesmo valor está na saída JSON.
A seguir tentei docker ps --format '{{.CreatedAt}}'
. Isso retorna valores como 2019-01-03 12:49:46 +0000 UTC
.
O problema é que isso não é ISO 8601 nem qualquer outro formato comum. O que é pior, tentar analisá-lo com date
dá:
date --date="$DATE"
date: invalid date ‘2019-01-03 12:49:46 +0000 UTC’
Espero que haja uma maneira melhor de obter um valor de milissegundos de época do que processar o valor manualmente com awk
etc, mas não consigo encontrá-lo. A melhor coisa seria uma função como {{epoch .CreatedAt}}
(semelhante a {{lower .Name}}
)
Existe
docker inspect <container-name>
o que fornece informações detalhadas sobre um contêiner.Você pode estar interessado no valor de State.StartedAt
Para inspecionar todos os contêineres em execução, você pode executar:
Saída JSON : Tendo o jq instalado (
apt-get install jq
), você pode filtrar apenas o nome do contêiner e o StartedAt comSaída CSV: (separado por ponto e vírgula, ordenado por idade)
EDITAR:
using
docker ps
(Assume-se que o tempo de criação = hora de início. O que não funciona se você parar e iniciar os contêineres. docker ps apenas forneceRunningFor
eStatus
, ambos no estilo legível "5 semanas atrás". É mais confiável usardocker inspect
o método para obter o tempo de execução real.)EDIT2:
Acontece que você pode fazer tudo isso com go e a API docker. Aqui está uma demonstração simples que acabei de codificar:
Você pode pegar o link binário : Ou alterar o código ao seu gosto e compilá-lo por si mesmo link
O resultado ficará assim:
Caso seja útil para alguém, aqui está um script bash que montei com base na resposta de Michael D.