Seré el primero en admitir que cometo muchos errores – Me gusta decir que me equivoco más de lo que tengo razón. Presente esto en “cosas que deseaba haber sabido antes“.
Este es el escenario: está dockericando una aplicación de Python que se ejecuta muy bien localmente, y la versión de Docker de la aplicación se niega a hacer nada – parece bloqueado, sin salida de consola. ¿Te suena familiar? Si es así, por suerte la solución es bastante sencilla.
Primero echemos un vistazo a la aplicación problemática. Podría ser tan simple como esto:
No pasa mucho aquí, simplemente imprimir una línea de texto en la consola, y caer en un bucle sin fin. Lo anterior podría hacerse más complicado, tal vez el bucle sin fin está procesando alguna cola de trabajo, o comprobando una fuente del mercado de valores, etc. En nuestro ejemplo, seguiremos con los conceptos básicos y simplemente en bucle.
La ejecución de esta aplicación localmente muestra que funciona muy bien, así que vamos a dockerizarla.
El Dockerfile anterior también es tan simple como las cosas se ponen. Copie la aplicación en una ruta de acceso dentro del entorno de Docker y ejecute python app.py en el inicio: el mismo comando que usaría para ejecutar esta aplicación localmente. ¿Se ve bien? Vamos a encender esto.
…
Nada. Ni una sola salida.
La solución aquí es realmente utilizar el parámetro “-u” al invocar Python. Este indicador deshabilita el almacenamiento en búfer de salida:
Con esta modificación, el Dockerfile ahora tiene este aspecto:
¡Eso es todo! La ejecución de la aplicación produce resultados, incluso cuando está dentro de Docker, y esperemos que esto le ahorró algún tiempo.