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:
-
-
Encuentra la ruta del archivo de registro por:
$ docker inspect | grep log
-
-
-
SSH en la máquina acoplable (suponga que el nombre es el
default
, si no, ejecutedocker-machine ls
para averiguarlo):$ docker-machine ssh default
-
-
-
Cambiar a usuario root ( reference ):
$ sudo -i
-
-
-
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
}
Utilizar:
truncate -s 0 /var/lib/docker/containers/*/*-json.log
Referencia: truncar un archivo mientras se está utilizando (Linux)
sudo sh -c "truncate -s 0 /var/lib/docker/containers/*/*-json.log"