¿Dónde guarda Docker los archivos de registro?
La depuración de la mayoría de los programas de Linux generalmente implica examinar los archivos de registro, lo cual es un proceso complejo. Sin embargo, cuando se ejecuta en un entorno en contenedores bajo Docker, deberá usar herramientas más específicas para depurar su aplicación en producción.
¿Dónde se almacenan los registros?
La respuesta simple es que Docker almacena registros de contenedores en su ubicación de almacenamiento principal,/var/lib/docker/
. Cada contenedor tiene un registro específico para su ID (el ID completo, no el ID abreviado que generalmente se muestra), y puede acceder a él de esta manera:
/var/lib/docker/containers/ID/ID-json.log
Ahí es donde se almacenan, pero dado que están en JSON, no es fácil de leer y tener que usar la identificación completa del contenedor es molesto. Docker proporciona un comando incorporado para verlos:
ventana acoplable registro -f e4bd48ef3103
aquí el-f
flag mantendrá el indicador abierto y «seguirá» cualquier nueva entrada en el archivo. Tú también puedes--tail
archivo, o uso--timestamps
para mostrar los tiempos de registro, o usar--until
y--since
para filtrar por tiempo.
Si está utilizando Docker Compose, puede ver fácilmente todos los registros usando el comando de registro en él:
registro docker-compose
Sin embargo, una cosa que notará es que se trata de STDOUT y STDERR, que son excelentes para muchas cosas, pero solo le muestran la salida de la consola para el punto de entrada especificado por «CMD» en el archivo Docker. Muchas aplicaciones tienen su propio sistema de registro dedicado, generalmente iniciando sesión en/var/log/nginx/access.log
. Todavía se puede acceder a dichos registros desde el lado del host a través de Docker.
Ver registros de la aplicación dentro del contenedor
Dependiendo del contenedor, esto puede no ser necesario. Por ejemplo, el contenedor NGINX predeterminado está configurado para enviar sus registros de Docker a STDOUT para simplificar la inspección de registros.se usa desde/dev/stdout
Un enlace simbólico al archivo de registro para hacer esto, puede configurar algo como esto para su contenedor.
Ejecute ln -sf /dev/stdout /var/log/nginx/access.log ln -sf /dev/stderr /var/log/nginx/error.log
Sin embargo, si desea retirar un archivo específico dentro del contenedor, puede hacerlo. Docker proporcionaexec -it
Un comando que le permite ejecutar cualquier comando en cualquier proceso de Docker en ejecución. Usándolo, puede rastrear archivos de registro dentro de un contenedor Docker:
docker exec -it e4bd48ef3103 cola -f log.txt
Dado que esto le permite ejecutar cualquier comando, puede usarjournalctl
o cualquier otra estrategia de depuración que desee, siempre y cuando termine condocker exec -it
./bin/bash
Si quieres saltar y pasear,Incluso puedes correr.
Una solución más permanente que es más adecuada para los servicios de hospedaje es usar montajes de volumen de Docker. Puede vincular el directorio con/var/log/nginx
a un volumen visible desde el host. Primero, crea un nuevo volumen:
volumen docker crear nginx-logs
y ejecutar el contenedor con--mount
:
docker run -d --name devtest --mount source=nginx-logs,target=/var/log/nginx nginx:latest
Si está utilizando Docker Compose, el proceso se puede automatizar:
versión: "3.0" servicio: red: imagen: nginx: último puerto: - "80:80" volumen: - nginx-logs: /var/log/nginx/volumes: nginx-logs:
De esta forma, cualquier servicio de agregación de registros en el host puede obtener directamente los archivos de registro.
Ver registros del demonio de Docker
Si desea ver registros específicos de todo el servicio de Docker en el servidor, en lugar de cualquier aplicación en contenedor específica, debe consultarjournalctl
Iniciar sesión:
sudo journalctl -fu docker.servicio
Aquí es donde se almacena en la mayoría de los sistemas, pero en una ubicación diferente en algunos:
- AmazonLinux:
/var/log/docker
- CentOS/RHEL:
/var/log/messages | grep docker
- sistema de Apple:
~/Library/Containers/com.docker.docker/Data/log/vm/dockerd.log
- Ventanas:
AppDataRoamingDockerlogvmdockerd.log