Borrar registros de contenedores de Docker
- Crear un nuevo proyecto
- Definir una imagen
- Construir una imagen
- ejecutar un contenedor
- Verifique los registros del contenedor
- Verifique los registros del contenedor en el archivo de registro
-
Borrar registros de contenedores de Docker con el comando
echo
-
Borrar registros de contenedores de Docker con el comando
truncar
- Borrar registros de contenedores de Docker mediante la rotación de registros
- Conclusión
Los registros son información registrada por la aplicación cuando ocurre un evento o estado en particular, y nos ayudan a monitorear la aplicación y tomar las acciones necesarias.
Por ejemplo, los registros nos ayudan a saber si el estado de la aplicación es activo o inactivo cuando implementamos una aplicación en producción. Cuando ocurre un error, podemos identificar el tipo de error que ocurrió usando los registros.
Con esta información, podemos realizar los cambios necesarios para corregir los errores. En una aplicación grande que usan muchas personas, puede ser un desafío administrar los registros, pero cuando usamos la ventana acoplable, podemos administrarlos fácilmente, ya que proporciona funciones que ayudan a manipular los registros.
Docker proporciona comandos como --detalles
, --since
, --tail
, --timestamps
y --hasta
que podemos aprovechar para manipular los registros. De forma predeterminada, Docker guarda los registros en formato JSON en la carpeta /var/lib/docker/containers/
, pero tenga en cuenta que debemos crear imágenes y ejecutar sus contenedores como el usuario raíz
para que se cree el archivo que contiene los registros. .
Si esto se hace sin privilegios de usuario root
, obtendremos el error File or directory not found
. En este tutorial, aprenderemos los diferentes enfoques que podemos aprovechar para borrar los registros del archivo */*-json.log
.
Crear un nuevo proyecto
Abra WebStorm IDEA y seleccione Archivo > Nuevo > Proyecto
. En la ventana abierta, seleccione Node.js y cambie el nombre del proyecto de “sin título” a docker-logs-clear
o use el nombre que prefiera.
Finalmente, presione el botón etiquetado como Crear
para generar el proyecto.
Cree un archivo index.js
en la carpeta docker-logs-clear
y copie y pegue el siguiente código en el archivo.
console.log('This is an express application')
console.error('An error occurred')
throw new Error('An exception occurred')
Este archivo crea un mensaje STDOUT
y dos mensajes STDERR
que se agregarán al archivo de registro cuando ejecutemos la aplicación. Podemos cambiar este código para que sea una aplicación web, pero tenga en cuenta que solo los mensajes STDOUT
y STDERR
se agregarán al archivo de registro.
Definir una imagen
Cree un archivo Dockerfile
en la carpeta docker-logs-clear
y copie y pegue las siguientes instrucciones en el archivo.
FROM node:18-alpine
WORKDIR /com/app
ADD package*.json ./
RUN npm install
ADD . .
CMD node index.js
Aquí, FROM
establece la imagen base sobre la que crear nuestra imagen personalizada siguiendo las instrucciones posteriores. En este caso, usamos alpine
para usar una imagen ligera de Node como imagen base.
La documentación de Docker proporciona una referencia de Dockerfile detallada donde podemos obtener más información sobre las otras instrucciones.
Construir una imagen
Tenga en cuenta que esta etapa debe ejecutarse como usuario root. Para lograr esto, abra una nueva ventana de terminal usando el atajo de teclado en su computadora y ejecute el siguiente comando para cambiar el usuario actual al usuario raíz.
david@david-HP-ProBook-6470b:~/WebstormProjects/docker-logs-clear$ sudo su
Producción :
root@david-HP-ProBook-6470b:/home/david/WebstormProjects/docker-logs-clear#
Asegúrese de cambiar el directorio cd
a la ubicación de su proyecto, como se muestra arriba, para poder construir la imagen. Una vez que tengamos acceso al usuario root, ejecute el siguiente comando para construir una imagen con la etiqueta docker-logs:latest
.
root@david-HP-ProBook-6470b:/home/david/WebstormProjects/docker-logs-clear# docker build --tag docker-logs:latest .
Este comando ejecuta nuestro Dockerfile
, y podemos ver las instrucciones que se ejecutan en la ventana del terminal como se muestra a continuación.
Step 1/6 : FROM node:18-alpine
18-alpine: Pulling from library/node
213ec9aee27d: Already exists
f379b689aea3: Pull complete
fe299d5780c0: Pull complete
c34a027bbf26: Pull complete
Digest: sha256:f829c27f4f7059609e650023586726a126db25aded0c401e836cb81ab63475ff
Status: Downloaded newer image for node:18-alpine
---> 867dce98a500
Step 2/6 : WORKDIR /com/app
---> Running in 3b215b9ad992
Removing intermediate container 3b215b9ad992
---> aba9cfa2472b
Step 3/6 : ADD package*.json ./
---> 6243ccacf178
Step 4/6 : RUN npm install
---> Running in 9b90745b171e
added 57 packages, and audited 58 packages in 9s
7 packages are looking for funding
run `npm fund` for details
found 0 vulnerabilities
Removing intermediate container 9b90745b171e
---> e73c696d9743
Step 5/6 : ADD . .
---> e5235f761af0
Step 6/6 : CMD node index.js
---> Running in 7a857eea0a06
Removing intermediate container 7a857eea0a06
---> 29a367a3be2d
Successfully built 29a367a3be2d
Successfully tagged docker-logs:latest
ejecutar un contenedor
Para ejecutar un contenedor usando la imagen docker-logs
, ejecute el siguiente comando que ejecuta un contenedor llamado docker-logs-prod
. Tenga en cuenta que no hay puertos expuestos ya que no es una aplicación web.
root@david-HP-ProBook-6470b:/home/david/WebstormProjects/docker-logs-clear# docker run -d --name docker-logs-prod docker-logs:latest
Verifique los registros del contenedor
Ejecutar el contenedor ejecuta el código en nuestra aplicación. Ejecute el siguiente comando para ver los registros generados por el contenedor como resultado de los mensajes STDOUT
y STDERR
.
root@david-HP-ProBook-6470b:/home/david/WebstormProjects/docker-logs-clear# docker logs -f docker-logs-prod
Producción :
This is an express application
An error occurred
/com/app/index.js:3
throw new Error("An exception occurred")
^
Error: An exception occurred
at Object.<anonymous> (/com/app/index.js:3:7)
at Module._compile (node:internal/modules/cjs/loader:1149:14)
at Module._extensions..js (node:internal/modules/cjs/loader:1203:10)
at Module.load (node:internal/modules/cjs/loader:1027:32)
at Module._load (node:internal/modules/cjs/loader:868:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
at node:internal/main/run_main_module:23:47
Node.js v18.10.0
Verifique los registros del contenedor en el archivo de registro
Para verificar que los registros anteriores se agregaron a nuestro archivo de registro, use el siguiente comando para verificar la ubicación del archivo de registro donde el contenedor guarda los registros generados.
root@david-HP-ProBook-6470b:/home/david/WebstormProjects/docker-logs-clear# docker inspect --format='{{.LogPath}}' docker-logs-prod
Producción :
/var/lib/docker/containers/1eb27be7b062346872869eaedfb250c526dc77437123dd18adf3dbb5e8b6b7da/1eb27be7b062346872869eaedfb250c526dc77437123dd18adf3dbb5e8b6b7da-json.log
Ahora que tenemos la ubicación donde se crea el archivo de registro, ejecute el siguiente comando para imprimir el contenido JSON del archivo de registro.
root@david-HP-ProBook-6470b:/home/david/WebstormProjects/docker-logs-clear# cat /var/lib/docker/containers/1eb27be7b062346872869eaedfb250c526dc77437123dd18adf3dbb5e8b6b7da/1eb27be7b062346872869eaedfb250c526dc77437123dd18adf3dbb5e8b6b7da-json.log
Producción :
{"log":"This is an express application\n","stream":"stdout","time":"2022-10-07T10:47:16.594937015Z"}
{"log":"An error occurred\n","stream":"stderr","time":"2022-10-07T10:47:16.596273395Z"}
{"log":"/com/app/index.js:3\n","stream":"stderr","time":"2022-10-07T10:47:16.617728515Z"}
{"log":"throw new Error(\"An exception occurred\")\n","stream":"stderr","time":"2022-10-07T10:47:16.61780931Z"}
{"log":"^\n","stream":"stderr","time":"2022-10-07T10:47:16.617822419Z"}
{"log":"\n","stream":"stderr","time":"2022-10-07T10:47:16.617832094Z"}
{"log":"Error: An exception occurred\n","stream":"stderr","time":"2022-10-07T10:47:16.617846368Z"}
{"log":" at Object.\u003canonymous\u003e (/com/app/index.js:3:7)\n","stream":"stderr","time":"2022-10-07T10:47:16.617855581Z"}
{"log":" at Module._compile (node:internal/modules/cjs/loader:1149:14)\n","stream":"stderr","time":"2022-10-07T10:47:16.617864838Z"}
{"log":" at Module._extensions..js (node:internal/modules/cjs/loader:1203:10)\n","stream":"stderr","time":"2022-10-07T10:47:16.617882182Z"}
{"log":" at Module.load (node:internal/modules/cjs/loader:1027:32)\n","stream":"stderr","time":"2022-10-07T10:47:16.617890043Z"}
{"log":" at Module._load (node:internal/modules/cjs/loader:868:12)\n","stream":"stderr","time":"2022-10-07T10:47:16.617898124Z"}
{"log":" at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)\n","stream":"stderr","time":"2022-10-07T10:47:16.617906808Z"}
{"log":" at node:internal/main/run_main_module:23:47\n","stream":"stderr","time":"2022-10-07T10:47:16.617914665Z"}
{"log":"\n","stream":"stderr","time":"2022-10-07T10:47:16.61792284Z"}
{"log":"Node.js v18.10.0\n","stream":"stderr","time":"2022-10-07T10:47:16.617930182Z"}
A partir del contenido JSON devuelto por el archivo, podemos ver todos los registros generados desde el contenedor, incluidos el flujo
y la hora
cuando ocurrió el evento. En la siguiente sección, aprenderemos cómo borrar los registros de este archivo.
Borrar registros de contenedores de Docker con el comando echo
Para borrar el contenido JSON del archivo de registro, ejecute el siguiente comando que usa el comando echo
para sobrescribir el archivo con una cadena vacía.
root@david-HP-ProBook-6470b:/home/david/WebstormProjects/docker-logs-clear# echo "" > $(docker inspect --format='{{.LogPath}}' docker-logs-prod)
Para verificar que nuestro archivo de registro se haya borrado, ejecute el comando docker logs -f docker-logs-prod
y tenga en cuenta que no devolverá ningún registro del archivo.
Borrar registros de contenedores de Docker con el comando truncar
Vuelva a ejecutar el contenedor anterior para generar los registros nuevamente y ejecute el siguiente comando para borrar los registros agregados al archivo de registro. Esto usa el comando truncar
para reducir el tamaño del archivo a 0
.
root@david-HP-ProBook-6470b:/home/david/WebstormProjects/docker-logs-clear# truncate -s 0 $(docker inspect --format='{{.LogPath}}' docker-logs-prod)
Para verificar que nuestro archivo de registro se haya borrado, ejecute el comando docker logs -f docker-logs-prod
y tenga en cuenta que no devolverá ningún registro del archivo.
Borrar registros de contenedores de Docker mediante la rotación de registros
En los dos ejemplos anteriores, hemos utilizado los comandos echo
y truncate
para borrar manualmente el contenido del archivo de registro. No se recomiendan estos enfoques, ya que pueden afectar el sistema de registro de Docker y provocar un comportamiento inesperado.
La forma recomendada de borrar registros de los contenedores es utilizar la rotación de registros. Para usar la rotación de registros con el controlador de registro predeterminado archivo json
, podemos configurar el tamaño máximo
y el archivo máximo
del archivo de registro en el archivo llamado daemon.json
ubicado en /etc/docker/
carpeta, como se muestra a continuación.
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
Esto debe hacerse con privilegios de usuario root
. Para que los cambios surtan efecto, debemos recargar docker usando el comando systemctl reload docker
.
Si queremos especificar la rotación de registros para contenedores individuales, podemos especificar --log-driver json-file
, --log-opt max-size=10m
y --log-opt max-file=3
opciones al ejecutar el contenedor.
Conclusión
En este tutorial, aprendimos diferentes enfoques que podemos usar para borrar los registros de los contenedores acoplables al borrar el contenido JSON agregado a los archivos de registro. Los enfoques que hemos cubierto en este tutorial incluyen el uso del comando echo
, el comando truncar
y la rotación de registro
.
David is a back end developer with a major in computer science. He loves to solve problems using technology, learning new things, and making new friends. David is currently a technical writer who enjoys making hard concepts easier for other developers to understand and his work has been published on multiple sites.
LinkedIn GitHub