Alguns comandos do docker fornecem a possibilidade de ajustar o formato de saída usando o modelo go. Assim, podemos usar esse mecanismo para obter a hora de início dos contêineres em execução mais fácil de processar.
Por exemplo:
docker ps --format='{{.ID}}' \
| xargs -n 1 -r docker inspect \
-f '{{.ID}} {{.State.Running}} {{.State.StartedAt}}' \
| awk '$2 == "true" && $3 <= "'$(date -d 'yesterday' -Ins --utc \
| sed 's/+0000/Z/')'" { print $1 }' \
| xargs -r docker kill
Assumimos que o GNU xargs
aqui - a opção -r
instrua xargs
para executar o comando apenas se houver pelo menos um argumento. Também dependemos do GNU date
- o objetivo é obter a data + hora de ontem - no formato ISO com o sufixo de hora do Zulu - de modo que seja compatível com o formato de data do docker interno. Assim, ambas as datas podem ser comparadas usando a comparação de cadeias normais, porque a ordem lexcicográfica desse formato de data corresponde à ordem da data.
O comando ps
docker não tem a opção -a
definida porque, por padrão, docker ps
mostra apenas os contêineres em execução - e só precisamos examinar os que estão em execução para matar.
Se você tiver um alias de comando do docker definido (por exemplo, alias docker='sudo /usr/bin/docker'
), será necessário substituir docker
por sudo /usr/bin/docker
nesse canal.