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
Libérer: 2024-12-24 07:17:16
original
209 Les gens l'ont consulté

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()
Copier après la connexion

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"]
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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()
Copier après la connexion

par :

if __name__ == '__main__':
    app.run(host='0.0.0.0')
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal