Cómo borrar registros de contenedores Docker en ejecución

Gráfico que muestra el logotipo de Docker

Los contenedores Docker de ejecución prolongada pueden acumular rápidamente una gran cantidad de líneas de registro. Estos consumen capacidad de almacenamiento y reducen el rendimiento al acceder y filtrar los datos. Si bien Docker incluye herramientas integradas para ver los registros, no existe un mecanismo integrado para limpiarlos.

En este artículo, aprenderá a borrar los registros de los contenedores Docker en ejecución, sin reiniciarlos ni reemplazarlos. También verá algunas técnicas para manejar registros grandes de manera más eficiente mientras conserva los datos antiguos.

→ Índice de contenidos

Comprender el problema

Docker recopila registros de la salida estándar y los flujos de error de los procesos de primer plano del contenedor. los docker logs El comando se usa para recuperar estos registros, pero no le permite eliminar líneas antiguas.

Docker admite muchos controladores de registro diferentes, por lo que no es posible ofrecer un mecanismo de limpieza estandarizado. Este artículo se centra en la norma json-file controlador de registro, donde las líneas de registro se almacenan en un archivo JSON en el sistema de archivos del host de su contenedor. Consulte la documentación de su controlador de almacenamiento si necesita limpiar los registros transmitidos a un host remoto.

Archivos de registro creados por el json-file controlador se almacenan bajo el /var/lib/docker/containers directorio. Cada contenedor obtiene su propio archivo de registro que se utiliza a lo largo de su vida útil. No hay rotación de registros configurada de forma predeterminada.

Eliminar simplemente el archivo de registro no es una solución efectiva. Docker espera que el archivo esté disponible continuamente y no lo volverá a crear automáticamente si se elimina. es mas seguro claro el contenido del registro existente para evitar afectar las escrituras actuales.

Descubrir la ruta del archivo de registro

Primero encuentre la ruta al archivo de registro de su contenedor de destino. Puede recuperar la ruta del archivo de registro para un contenedor llamado my-app ejecutando el siguiente comando:

$ docker inspect --format="{{.LogPath}}" my-app
/var/lib/containers/1380d936...-json.log

Borrar el archivo de registro

Puede borrar el contenido del registro sin eliminarlo haciendo eco de una cadena vacía en su contenido. El archivo será propiedad de root por lo que deberá realizar esta operación en un shell raíz. El siguiente comando vaciará el archivo de registro por usted:

$ sudo sh -c 'echo "" > $(docker inspect --format="{{.LogPath}}" my-app)'

La interpolación de shell se utiliza para recuperar dinámicamente la ruta del archivo de registro para el my-app envase. En su lugar, puede sustituir manualmente en la ruta recuperada anteriormente.

cuando corres docker logs my-appahora verá una salida vacía a menos que el contenedor haya reanudado la escritura de líneas en el ínterin.

Limitación de salida de registro

los docker logs El comando acepta algunos argumentos que se pueden usar para limitar la salida de registros ruidosos. Estos ayudan a mitigar la necesidad de limpiar el registro y evitan que su terminal se inunde con líneas antiguas cada vez que accede al archivo.

  • --tail - Esta bandera le indica a Docker que emita solo una cantidad específica de líneas de registro antiguas, comenzando con la más reciente.
  • --until y --since - Estas banderas restringen la salida a las líneas de registro emitidas durante un período de tiempo específico. Son útiles cuando conoce el período de tiempo aproximado en el que ocurrió un evento.

Aquí están algunos ejemplos:

Mostrar las 100 líneas de registro más recientes

docker logs my-app --tail 100

Mostrar líneas de registro escritas en la última hora

docker logs my-app --since 1h

Muestra hasta 100 líneas de registro escritas en la última hora

docker logs my-app --tail 100 --since 1h

Configuración de la rotación de registros

Tener que limpiar regularmente los archivos de registro de esta manera generalmente indica que los registros de su aplicación son excesivamente detallados o simplemente hay demasiada actividad para almacenar en un archivo.

Muchos controladores de registro de Docker, incluidos json-filetiene soporte de rotación de registros opcional que puede habilitar globalmente para el demonio de Docker o por contenedor.

Los ajustes del daemon se configuran en /etc/docker/daemon.json. Este es un ejemplo que rota los registros del contenedor una vez que alcanzan los 8 MB. Se conservarán hasta cinco archivos en cualquier momento, y los antiguos se eliminarán automáticamente a medida que se produzcan nuevas rotaciones.

{
    "log-opts": {
        "max-size": "8m",
        "max-file": "5"
    }
}

Reinicie el demonio de Docker para aplicar el cambio:

$ sudo service docker restart

La rotación a nivel de daemon se aplica a todos los contenedores recién creados. Los cambios no afectarán a ningún contenedor que ya exista en su host.

La rotación se puede configurar para contenedores individuales usando --log-opts banderas Estos anularán la configuración predeterminada del demonio Docker.

docker run --name app 
    --log-driver json-file 
    --log-opts max-size=8M 
    --log-opts max-file=5 
    app-image:latest

Resumen

Los registros del contenedor de Docker pueden volverse ruidosos cuando las aplicaciones ocupadas escriben resultados extensos. El acceso a los registros detallados es útil para la depuración, pero consumen espacio de almacenamiento, dificultan la selección de datos y pueden reducir el rendimiento.

Puede limpiar archivos de registro a pedido usando comandos de shell para vaciar su contenido. Sin embargo, es mejor práctica configurar la rotación de registros para que esto ocurra automáticamente una vez que los archivos alcanzan un tamaño específico. los docker logs El comando también admite indicadores que pueden ayudar a controlar los registros difíciles de manejar en el punto de acceso.

Subir Change privacy settings