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

Resuelto Youssouf Maiga asked hace 7 años • 25 respuestas

Solía docker logs [container-name]​​​​ver los registros de un contenedor específico.

¿Existe una forma elegante de borrar estos registros?

Youssouf Maiga avatar Feb 28 '17 20:02 Youssouf Maiga
Aceptado

Primero la mala respuesta. De esta pregunta hay una línea que puede ejecutar:

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

en lugar de eco, existe el más simple:

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

o está el comando truncar:

truncate -s 0 $(docker inspect --format='{{.LogPath}}' <container_name_or_id>)

No soy un gran admirador de ninguno de ellos, ya que modifican los archivos de Docker directamente. La eliminación del registro externo podría ocurrir mientras Docker escribe datos con formato json en el archivo, lo que genera una línea parcial y anula la capacidad de leer cualquier registro de la docker logsCLI. Para ver un ejemplo de lo que sucede, vea este comentario sobre la respuesta de duketwo :

Después de vaciar el archivo de registro, aparece este error:error from daemon in stream: Error grabbing logs: invalid character '\x00' looking for beginning of value

En su lugar, puede hacer que Docker rote automáticamente los registros por usted. Esto se hace con indicadores adicionales en Dockerd si está utilizando el controlador de registro JSON predeterminado :

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

También puedes configurar esto como parte de tu archivo daemon.json en lugar de modificar tus scripts de inicio:

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

Estas opciones deben configurarse con acceso de root. Asegúrese de ejecutar a systemctl reload dockerdespués de cambiar este archivo para aplicar la configuración. Esta configuración será la predeterminada para cualquier contenedor recién creado. Tenga en cuenta que los contenedores existentes deben eliminarse y volverse a crear para recibir los nuevos límites de registro.


Se pueden pasar opciones de registro similares a contenedores individuales para anular estos valores predeterminados, lo que le permite guardar más o menos registros en contenedores individuales. De docker runesto se ve así:

docker run --log-driver json-file --log-opt max-size=10m --log-opt max-file=3 ...

o en un archivo de redacción:

version: '3.7'
services:
  app:
    image: ...
    logging:
      options:
        max-size: "10m"
        max-file: "3"

Para ahorrar espacio adicional, puede cambiar del controlador de registro json al controlador de registro "local". Toma las mismas opciones de tamaño máximo y archivo máximo, pero en lugar de almacenar en json usa una sintaxis binaria que es más rápida y más pequeña. Esto le permite almacenar más registros en el mismo archivo de tamaño. La entrada daemon.json para esto se ve así:

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

La desventaja del controlador local es que los analizadores/reenviadores de registros externos que dependían del acceso directo a los registros json ya no funcionarán. Entonces, si usa una herramienta como filebeat para enviar a Elastic o el reenviador universal de Splunk, evitaría el controlador "local".

Tengo un poco más sobre esto en mi presentación de Consejos y trucos .

BMitch avatar Feb 28 '2017 13:02 BMitch

Usar:

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

Puede que necesites sudo

sudo sh -c "truncate -s 0 /var/lib/docker/containers/**/*-json.log"

árbitro. Jeff S. Docker: ¿Cómo borrar correctamente los registros de un contenedor Docker?

Referencia: Truncar un archivo mientras se usa (Linux)

duketwo avatar Apr 23 '2017 10:04 duketwo

En Docker para Windows y Mac, y probablemente también en otros, es posible utilizar la opción tail. Por ejemplo:

docker logs -f --tail 100

De esta manera, solo se muestran las últimas 100 líneas y no es necesario desplazarse primero por 1 millón de líneas...

(Y por lo tanto, eliminar el registro probablemente no sea necesario)

 avatar Mar 17 '2019 15:03