Maison >développement back-end >Tutoriel Python >Pourquoi ne puis-je pas accéder à mon application Flask après l'avoir déployée dans Docker ?

Pourquoi ne puis-je pas accéder à mon application Flask après l'avoir déployée dans Docker ?

DDD
DDDoriginal
2024-12-24 07:17:16211parcourir

Why Can't I Access My Flask App After Deploying it in Docker?

Déploiement de l'application Flask dans Docker : résolution des problèmes de connexion au serveur

Lors du déploiement d'applications Flask dans Docker, il est possible de rencontrer des problèmes de connectivité du serveur même si le conteneur semble être en cours d'exécution. Cet article examinera un problème courant et fournira une solution pour garantir que l'application est accessible depuis l'extérieur du conteneur.

Description du problème

Considérez une application nommée "perfektimprezy" qui s'exécute sur Flask, avec le source suivante :

from flask import Flask

app = Flask(__name__)
app.debug = True

@app.route('/')
def main():
    return 'hi'

if __name__ == '__main__':
    app.run()

Lorsqu'il est déployé dans un conteneur Docker, le serveur semble fonctionner, mais l'application reste inaccessible de l'extérieur du conteneur.

Configuration Docker

Le Dockerfile utilisé pour le déploiement est :

# Dockerfile
FROM dreen/flask
MAINTAINER dreen
WORKDIR /srv

# Get source
RUN mkdir -p /srv
COPY perfektimprezy.tar.gz /srv/perfektimprezy.tar.gz
RUN tar x -f perfektimprezy.tar.gz
RUN rm perfektimprezy.tar.gz

# Run server
EXPOSE 5000
CMD ["python", "index.py"]

Les étapes de déploiement impliquent la création de l'image et l'exécution du conteneur avec le port 5000 exposé :

>$ sudo docker build -t perfektimprezy .
>$ sudo docker run -i -p 5000:5000 -d perfektimprezy

Enquête

Le conteneur semble fonctionner comme prévu, avec le serveur Flask écoute sur le port 5000 au sein du conteneur :

>$ sudo docker logs 1c50b67d45b1
    * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
    * Restarting with stat

Cependant, les requêtes adressées à l'application depuis l'extérieur du conteneur entraînent des réponses vides :

>$ curl 127.0.0.1:5000 -v
* Empty reply from server

Solution

Le problème réside dans la liaison de l'application Flask à l'interface localhost. Pour rendre l'application accessible depuis l'extérieur du conteneur, elle doit plutôt se lier à l'adresse 0.0.0.0.

Dans l'initialisation de l'application Flask, remplacez :

if __name__ == '__main__':
    app.run()

par :

if __name__ == '__main__':
    app.run(host='0.0.0.0')

Cette modification liera l'application à toutes les interfaces de l'hôte, la rendant accessible depuis l'extérieur du conteneur.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn