J'ai une application flask et j'essaie de l'exécuter dans un conteneur docker en utilisant gunicorn.
Voici mon fichier docker
curl -X POST http://172.17.0.2:8000/login -H 'cache-control: no-cache' -H 'content-type: application/json' -d '<SOME_PAYLOAD>' curl: (7) Failed to connect to 172.17.0.2 port 8000: Operation timed out
Voici comment je suis exécuter le conteneur -
docker run <name>
Et voici comment je le teste-
FROM python:3.6 WORKDIR /app COPY ./requirements.txt /.requirements.txt COPY . /app # Install any needed packages specified in requirements.txt RUN pip install -r requirements.txt EXPOSE 8000 ENV FLASK_APP=<some_name> ENV FLASK_ENV=development CMD gunicorn -b :8000 -w 4 app:app
J'ai parcouru un couple de réponses sur ce site
Pour autant que je sache, je suis
Pourquoi cette opération expire-t-elle?
J'ai également essayé
CMD gunicorn -b 0.0.0.0:8000 -w 4 app: app
qui devrait tout mapper docker run -p 8000: 8000 itératif
, ce qui devrait forcer le mappage entre les ports sur l'hôte et le conteneur. Mais en vain.
Sur mon ordinateur, l'application fonctionne correctement.
Pourquoi ne fonctionne-t-il pas dans le conteneur Docker?
3 Réponses :
Vous exécutez votre conteneur Docker de manière incorrecte
docker run -p 8080:8080 <the-name-of-your-image>
En supposant que votre Dockerfile obtient les fichiers corrects, cela devrait résoudre le problème
allez à localhost: 8080 pour vérifier p >
D'après mon expérience, j'ai trouvé que la méthode ci-dessous était plus efficace lorsqu'il s'agissait de gunicorn et docker for flask. Je vous suggère d'exécuter le CMD dans le Dockerfile comme suit:
CMD ["gunicorn", "-w", "5", "-b", "0.0.0.0:8000", "<scriptname>:<runtimefunction>"]
Le nom du script dans votre cas sera très probablement "app.py" et la fonction d'exécution "app". Juste pour indiquer ce que je suggère:
dans app.py
from flask import Flask app = Flask(__name__) @app.route("/") def home(): return "Hello, World!" if __name__ == "__main__": app.run(debug=True)
Pour ajouter également les ouvriers:
CMD ["gunicorn", "-b", "0.0.0.0:8000", "<scriptname>:<runtimefunction>"]
J'espère que cela vous aidera.
J'ai également rencontré ce problème, le problème bien sûr étant que j'avais spécifié un port différent quelque part dans la chaîne d'outils.
Vérifiez à nouveau vos ports!
app.py
docker run -p 8001:8001 "$CONTAINER_TAG"
Dockerfile
FROM foo-image:tag ... RUN pip3 install gunicorn Flask COPY *.py /app/ WORKDIR /app EXPOSE 8001 CMD ["gunicorn", "-b", "0.0.0.0:8001", "--workers", "2", "app:app"]
exécuter la commande
https://docs.docker.com/engine/reference/run / # exposer-les-ports
from flask import Flask app = Flask(__name__) @app.route('/') def index(): return "example"