Qué vas a hacer
Un contenedor es un programa que se ejecuta en su propia cajita cerrada, con sus propios archivos. Los sistemas reales se componen de varios que trabajan juntos. Cuando uno se para, lo primero es ver qué está en marcha, leer lo que ha escrito y mirar dentro de los contenedores vecinos. Tu laboratorio tiene tres contenedores y uno no arranca. Vas a descubrir por qué, arreglarlo y volver a arrancarlo, con los únicos cuatro comandos docker que permite este terminal.
Antes de empezar
Nota
Pulsa Iniciar el laboratorio en la barra superior de esta lección y espera a que diga que está en marcha. Los tres contenedores se llaman web, cache y worker, y docker en este terminal solo habla de ellos. Cada botón Ejecutar escribe su comando en el terminal de tu laboratorio, uno detrás de otro y en la misma sesión. Para verlos o para escribir los tuyos, pulsa Abrir el terminal (pestaña nueva) en la barra.
1. Mira qué está en marcha y lee el registro
docker ps -a lista todos los contenedores, también los parados. Fíjate en la columna STATUS: web y cache dicen Up y (healthy), y worker dice Exited (1), es decir, se paró nada más arrancar. Un simple docker ps no lo habría mostrado. Un contenedor parado conserva su registro, y el segundo comando lo imprime: la primera línea empieza por worker: cannot start y dice que a su archivo de ajustes le falta la línea QUEUE_HOST.
docker ps -aSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
docker logs workerSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
2. Mira dentro de un vecino, arréglalo y reinícialo
No se puede entrar en un contenedor parado, pero web comparte con él la carpeta de ajustes, un volumen con nombre. docker exec ejecuta un comando dentro de un contenedor en marcha: este imprime el archivo de ajustes, de cuatro líneas, la última POLL_SECONDS=5. El segundo añade la línea que falta y nombra el servicio que guarda la cola, cache. (Para tener una consola dentro, escribe docker exec -it web sh en tu propio terminal.) Después, docker restart worker lo arranca otra vez e imprime su nombre.
docker exec web cat /settings/worker.confSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
docker exec web sh -c "echo QUEUE_HOST=cache >> /settings/worker.conf"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
docker restart workerSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
3. Compruébalo y mira qué se conserva
Ahora worker dice Up y, durante unos segundos, (health: starting) antes de (healthy): ejecútalo otra vez si aún no ha cambiado. Si escribes docker logs worker en tu propio terminal, el registro ahora termina con líneas worker: finished job. Después pulsa Detener el laboratorio en la barra y Iniciar el laboratorio de nuevo, y ejecuta docker ps -a: worker arranca sano enseguida, porque tu línea está en el volumen con nombre. Todo lo que hubieras escrito dentro de un contenedor fuera de /settings habría desaparecido, que es como se comportan los contenedores en todas partes.
docker psSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Para el profesorado
Consejo
Esta lección es un pequeño ejemplo de una lección practicada en un laboratorio: los pasos y los botones Ejecutar son la lección, y el laboratorio es la copia de cada alumno. El laboratorio tiene tres servicios y un volumen con nombre, y nada se corrige solo: el alumno entrega docker ps -a antes y después del arreglo, la línea del registro que le dijo qué fallaba y una frase sobre lo que sobrevive cuando el laboratorio se detiene. Cópiela en su propio módulo y modifíquela, o cree una desde cero con el menú Laboratorio del creador de lecciones.