Cómo borrar registros de contenedores Docker en ejecución
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.
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-app
ahora 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-file
tiene 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.