imagenes hub example dockers container python docker flask

python - hub - Ejecutar la aplicación Flask en un contenedor Docker



download docker image (5)

Creé una imagen de Docker que contiene una simple aplicación de prueba de Flask:

from flask import Flask app = Flask(__name__) @app.route("/") def hello_world(): return "Hello World!" if __name__ == "__main__": app.run(debug=True,host=''0.0.0.0'')

usando el Dockerfile :

FROM ubuntu:latest RUN apt-get update -y RUN apt-get install -y python-pip python-dev build-essential COPY . /app WORKDIR /app RUN pip install -r /app/requirements.txt ENTRYPOINT ["python"] CMD ["app.py"]

La imagen de Docker se construyó usando docker build -t flask-app . y ha sido creado con éxito:

$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE flask-app latest fab0d79fd7ac 8 minutes ago 642.2 MB ubuntu latest 104bec311bcd 5 weeks ago 129 MB

y lo he ejecutado usando:

$ docker run -d -p 5000:5000 flask-app e92b249dd02ca44489069b783fa9be713c7a14ea893061194e37c80f16d8c931

Supongo que puedo probar la aplicación apuntando el navegador a http://localhost:5000/ pero obtengo un tiempo de espera. ¿Qué podría estar yendo mal?


  1. Obtener la ID del contenedor:

[sudo] docker ps -qf "name=<containername>"

  1. Obtener ese contenedor ip:

docker inspect --format ''{{ .NetworkSettings.IPAddress }}'' <container_id>

  1. Luego, conéctese a http://<the_resulting_ip>:5000/

Falta esta parte en Dockerfile

COPY ./requirements.txt /app/requirements.txt Add this line to your Dockerfile before

app.py

from flask import Flask app = Flask(__name__) @app.route("/") def hello_world(): return "Hello World!" if __name__ == "__main__": app.run(debug=True,host=''0.0.0.0'')

requisitos.txt

Flask==0.10.1 #or it can be any version

Dockerfile

FROM ubuntu:16.04 MAINTANER Your Name "[email protected]" RUN apt-get update -y && / apt-get install -y python-pip python-dev #your Dockerfile is missing this line COPY ./requirements.txt /app/requirements.txt WORKDIR /app RUN pip install -r requirements.txt COPY . /app ENTRYPOINT [ "python" ] CMD [ "app.py" ]

docker comandos para ejecutar

docker build -t flaskapp:latest . #flask runs in default port 5000 docker run -d -p 5000:5000 flaskapp


Hice los siguientes pasos en mi sistema:

  1. Copió el código de su matraz y su archivo Docker
  2. Creó un archivo requirements.txt con un flask en la primera línea
  3. Construyó la imagen y la ejecutó, como lo ha hecho

Me funciona bien:

$ curl localhost:5000 Hello World!

El proceso de docker no se ejecuta correctamente y la comprobación de registros está bien:

$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0c0228a88719 flask-app "python app.py" 25 seconds ago Up 24 seconds 0.0.0.0:5000->5000/tcp frosty_borg $ docker logs 0c0228a88719 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit) * Restarting with stat * Debugger is active! * Debugger pin code: 216-035-222 172.17.0.1 - - [22/Jan/2017 12:56:37] "GET / HTTP/1.1" 200 -

Cuando inicie su contenedor acoplable, verifique si está escuchando el puerto 5000. Por ejemplo, en mi sistema:

$ netstat -atn | grep 5000 tcp6 0 0 ::1.5000 *.* LISTEN tcp4 0 0 *.5000 *.* LISTEN $ docker stop 0c0228a88719 0c0228a88719 $ netstat -atn | grep 5000 $ # stops listening

Es importante saber cómo está ejecutando dpcker, ¿se está ejecutando de forma nativa en una máquina de escritorio de Linux? ¿O lo está ejecutando dentro de una máquina virtual Linux en un host Mac / Windows (a través de un servicio como docker u otro método)? Si es así, entonces el problema podría ser que la dirección IP a la que debe acceder no es localhost, sino la dirección IP de la máquina virtual.


Tal vez su motor de docker no se está ejecutando en el mismo sistema operativo donde está lanzando su comando. Por ejemplo, si utiliza la ventana acoplable con ventanas, el motor acoplador (a menudo) se ejecuta dentro de una máquina virtual con una dirección IP diferente, por lo que debe escribir http: // [ máquina virtual IP ]: 5000 /

En alguna configuración, la URL correcta es http://192.168.99.100:5000/ (porque de forma predeterminada, en algunas configuraciones, la dirección IP de esa máquina virtual es 192.168.99.100)


Todo se ve bien desde aquí. Hagamos algunas depuraciones

Comencemos por iniciar nuestro contenedor con un nombre: docker run -d -p 5000:5000 --name flask-app-test flask-app

También puede evitar el indicador -d y obtener los registros directamente en su pantalla.

Primero compruebe si la aplicación Flask se está ejecutando realmente o si se ha bloqueado. Comience con un simple docker ps (vea si nota algo extraño allí) seguido de los docker logs flask-app-test (estos serán los registros de la aplicación Flask, ¿se ha bloqueado? ¿Hay algo extraño?)

Si todo se ve bien hasta aquí, entonces es hora de ingresar al contenedor. Probemos con docker exec -ti flask-app-test bash . Una vez que esté dentro, instale wget por apt-get install wget y luego pruebe si el servidor web funciona desde adentro al hacer wget http://localhost:5000 y al seleccionar el archivo descargado con suerte (seguido de cat file.html , o como se llame).