¿Cómo limpiar los registros correctamente para un contenedor Docker?


Utilizo docker logs [container-name] para ver los registros de un contenedor específico.

¿Hay una manera elegante de limpiar estos registros?

Author: Peter Mortensen, 2017-02-28

8 answers

De esta pregunta hay una línea que puedes ejecutar:

echo "" > $(docker inspect --format='{{.LogPath}}' <container_name_or_id>)

No soy un gran fan de modificar directamente los archivos de Docker. Puede hacer que Docker gire automáticamente los registros por usted. Esto se hace con banderas adicionales a dockerd si está utilizando el controlador de registro JSON predeterminado :

dockerd ... --log-opt max-size=10m --log-opt max-file=3

También puede establecer esto como parte de su demonio .json archivo en lugar de modificar sus scripts de inicio:

{
  "log-driver": "json-file",
  "log-opts": {"max-size": "10m", "max-file": "3"}
}

Asegúrese de ejecutar un systemctl reload docker después de cambiar este archivo para tener la configuración aplicada.

 98
Author: BMitch,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-24 16:19:38

Uso:

truncate -s 0 /var/lib/docker/containers/*/*-json.log

Referencia: Truncando un archivo mientras está siendo usado (Linux)

 92
Author: duketwo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-24 16:22:35

Puede configurar logrotate para borrar los registros periódicamente.

Archivo de ejemplo en /etc/logrotate.d / docker-logs

/var/lib/docker/containers/*/*.log {
 rotate 7
 daily
 compress
 size=50M
 missingok
 delaycompress
 copytruncate
}
 13
Author: AlexPnt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-25 08:17:49
sudo sh -c "truncate -s 0 /var/lib/docker/containers/*/*-json.log"
 8
Author: richard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-23 13:38:03

No puede hacer esto directamente a través de un comando Docker.

Puede limitar el tamaño del registro o usar un script para eliminar los registros relacionados con un contenedor. Puede encontrar ejemplos de scripts aquí (lea desde la parte inferior): Característica: Capacidad de borrar el historial de registro#1083

Consulte la sección de registro de la referencia del archivo docker-compose, donde puede especificar opciones (como la rotación del registro y el límite del tamaño del registro) para algunos controladores de registro.

 6
Author: Tristan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-21 15:21:48

Como usuario root , intente ejecutar lo siguiente:

>  /var/lib/docker/containers/*/*-json.log

O

cat /dev/null > /var/lib/docker/containers/*/*-json.log

O

echo "" > /var/lib/docker/containers/*/*-json.log
 4
Author: matson kepson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-24 16:23:16

Docker4Mac, una solución de 2018:

LOGPATH=$(docker inspect --format='{{.LogPath}}' <container_name_or_id>)
docker run -it --rm --privileged --pid=host alpine:latest nsenter -t 1 -m -u -n -i -- truncate -s0 $LOGPATH

La primera línea obtiene la ruta del archivo de registro, similar a la respuesta aceptada.

La segunda línea usa nsenter que le permite ejecutar comandos en la máquina virtual xhyve que sirve como host para todos los contenedores de docker bajo Docker4Mac. El comando que ejecutamos es el familiar truncate -s0 $LOGPATH de respuestas que no son de Mac.

Si estás usando docker-compose, la primera línea se convierte en:

local LOGPATH=$(docker inspect --format='{{.LogPath}}' $(docker-compose ps -q <service>))

Y <service> es el nombre del servicio de su archivo docker-compose.yml.

Gracias a https://github.com/justincormack/nsenter1 para el truco nsenter.

 2
Author: gooli,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-15 21:36:08

Docker para usuarios de Mac, aquí está la solución:

    1. Encuentra la ruta del archivo de registro por:

      $ docker inspect | grep log

    1. SSH en la máquina acoplable (supongamos que el nombre es default, si no, ejecute docker-machine ls para averiguarlo):

      $ docker-machine ssh default

    1. Cambiar a usuario root (referencia):

      $ sudo -i

    1. Eliminar el archivo de registro contenido:

      $ echo "" > log_file_path_from_step1

 -1
Author: Jinsong Li,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-11 20:49:49