¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Lee ajustes y logs de un contenedor

Después de esta lección: Puedo averiguar cómo se configuró un contenedor y qué ha dicho.

Lección de 50 min9 comandosLaboratorio de Docker: aprende contenedores, registros y reinicios arreglando un servicio roto

Algo falló a las nueve de la noche

La página de una tienda muestra un error. La persona que la hizo duerme. Tú estás de guardia y no puedes preguntarle nada.

Todo lo que necesitas está en la máquina: lo que se le dijo al programa que hiciera y lo que el programa dijo mientras funcionaba.

Al terminar esta lección

Nota

Puedo averiguar cómo se configuró un contenedor y qué ha dicho.

Palabras clave

PalabraQué significaEjemplo
Inspeccionarleer todos los ajustes de un contenedor
Loglos mensajes que un programa escribe mientras funciona
Código de salidael número que da un programa al parar; 0 significa éxito
Comprobación de saluduna prueba que Docker repite para ver si un servicio responde
Variable de entornoun ajuste con nombre que se da a un programaNGINX_VERSION

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

docker inspect lee los ajustes de un contenedor

docker ps muestra unas pocas columnas. docker inspect muestra todo lo que Docker sabe de un contenedor, en JSON.

Casi nunca se lee entero. --format elige un campo, escrito entre dobles llaves. Los cuatro comandos siguientes leen la imagen, las puertas, el límite de memoria y una variable de entorno de web.

¿Qué imagen ejecuta web?

Comando
docker inspect --format '{{.Config.Image}}' web

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

¿Qué puertas dice usar?

Comando
docker inspect --format '{{json .Config.ExposedPorts}}' web

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

¿Cuánta memoria puede usar, en bytes?

Comando
docker inspect --format '{{.HostConfig.Memory}}' web

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Lee una variable de entorno de dentro

Comando
docker exec web printenv NGINX_VERSION

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Ejemplo resuelto: quién fijó cada cosa

CosaQuién la fijóCómo se lee
La imagenquien arrancó el contenedorConfig.Image
Las puertasel autor de la imagen, en el DockerfileConfig.ExposedPorts
El límite de memoriael archivo compose del laboratorioHostConfig.Memory
NGINX_VERSIONel autor de la imagen, en el Dockerfiledocker exec web printenv NGINX_VERSION

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Un error frecuente

Advertencia

Mucha gente cree que docker ps muestra todo de un contenedor. Muestra un resumen. El usuario con el que corre, sus límites, su entorno y su salud solo están en docker inspect. Usa ps para encontrar el contenedor e inspect para hacerle preguntas.

Un log es lo que el programa dijo

El log de un contenedor es todo lo que imprimió su programa principal. docker logs lo muestra.

Un servicio ocupado escribe mucho. En este laboratorio una comprobación de salud llama a web cada pocos segundos, y cada llamada es una línea. Por eso se filtra. Primero pide una página que no existe.

Pide a web una página que no tiene

Comando
curl -s -o /dev/null -w "%{http_code}\n" http://web/missing

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Encuentra esa petición en el log

Comando
docker logs web 2>&1 | grep "/missing"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Código de salida y salud dicen cómo acabó

Un contenedor está en marcha o se ha parado. Cuando se para, su código de salida dice cómo. Cero significa que terminó bien. Cualquier otro número significa que falló.

Una comprobación de salud es una prueba que Docker repite mientras el contenedor funciona. El resultado es healthy o unhealthy.

¿Está web en marcha? ¿Qué código tiene?

Comando
docker inspect --format '{{.State.Status}} {{.State.ExitCode}}' web

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

¿Pasa web su comprobación de salud?

Comando
docker inspect --format '{{.State.Health.Status}}' web

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

¿Cuánta memoria usa web ahora?

Comando
docker stats --no-stream --format "{{.Name}} {{.MemUsage}}" web

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Ejemplo resuelto: cuatro preguntas ante un fallo

PreguntaComandoLo que podría mostrar un trabajo "report" parado
¿Está en marcha?docker ps -aExited (137) hace un minuto
¿Cómo acabó?docker inspect --format '{{.State.ExitCode}}' report137: lo mataron
¿Qué dijo al final?docker logs --tail 5 reportuna línea sobre quedarse sin memoria
¿Qué se le había fijado?docker inspect --format '{{.HostConfig.Memory}}' reportun límite menor de lo que el trabajo necesita

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Para ir más lejos

El worker del laboratorio se ha parado. Ya tienes las cuatro preguntas para él: su estado, su código de salida, su log y sus ajustes. La tarea del laboratorio es responderlas y arreglarlo.

Antes, ejecuta docker inspect web sin --format. Encuentra las tres secciones grandes: Config, State y HostConfig.

Sobre este laboratorio y su código: Laboratorio de Docker: aprende contenedores, registros y reinicios arreglando un servicio roto

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.