volumenes subir none imagenes imagen hub eliminar contenedor borrar docker docker-compose boot2docker docker-machine

subir - eliminar imagenes none docker



¿Cómo borrar los registros correctamente para un contenedor Docker? (10)

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

¿Hay alguna forma elegante de borrar estos registros?


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


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

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

No soy un gran fanático de modificar los archivos de Docker directamente con esto, un comando truncar o rotar el registro, ya que cada uno es externo al acoplador. La eliminación del registro externo podría ocurrir mientras Docker escribe datos con formato json en el archivo, lo que da como resultado una línea parcial y rompe la capacidad de leer cualquier registro desde el cli de docker logs Docker.

En cambio, puede hacer que Docker gire automáticamente los registros por usted. Esto se hace con indicadores adicionales para dockerd si está utilizando el controlador de registro JSON predeterminado:

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

También puede configurar esto como parte de su archivo daemon.json 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 que se aplique la configuración. Esta configuración será la predeterminada para cualquier contenedor recién creado. Los contenedores existentes deben eliminarse y recrearse para recibir los nuevos límites de registro. Y 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.


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 (suponga que el nombre es el default , si no, ejecute docker-machine ls para averiguarlo):

      $ docker-machine ssh default

    1. Cambiar a usuario root ( reference ):

      $ sudo -i

    1. Eliminar el contenido del archivo de registro:

      $ echo "" > log_file_path_from_step1


Docker4Mac, una solución 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 xhyve virtual xhyve que xhyve servidor para todos los contenedores de Docker en Docker4Mac. El comando que ejecutamos es el conocido truncate -s0 $LOGPATH de respuestas que no son de Mac.

Si está 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 por el truco nsenter .


En Docker en Windows y probablemente también en otros, es posible usar la opción de cola.

por ejemplo, registros de Docker -f --tail 100 msftmodbus

De esta manera, solo se muestran las últimas 100 líneas, y no tiene que desplazarse primero por las líneas 1M ...

(Y por lo tanto, eliminar el registro es probablemente innecesario)


En mis servidores Ubuntu, incluso como sudo, obtendría Cannot open ''/var/lib/docker/containers/*/*-json.log'' for writing: No such file or directory

Pero peinar el docker inspeccionar y truncar respuestas funcionó:

sudo truncate -s 0 `docker inspect --format=''{{.LogPath}}'' <container>`


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

Puede limitar el tamaño del registro o utilizar una secuencia de comandos para eliminar registros relacionados con un contenedor. Puede encontrar ejemplos de scripts aquí (leer desde abajo): Característica: Capacidad para borrar el historial de registro # 1083

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


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 }



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