首页 >后端开发 >Python教程 >为什么我的 Flask 应用部署到 Docker 后无法访问?

为什么我的 Flask 应用部署到 Docker 后无法访问?

DDD
DDD原创
2024-12-24 07:17:16211浏览

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

在 Docker 中部署 Flask 应用程序:解决服务器连接问题

在 Docker 中部署 Flask 应用程序时,尽管容器看起来正在运行,但可能会遇到服务器连接问题。本文将调查一个常见问题并提供一个解决方案,以确保可以从容器外部访问该应用程序。

问题描述

考虑一个在 Flask 上运行的名为“perfektimprezy”的应用程序,其以下来源:

from flask import Flask

app = Flask(__name__)
app.debug = True

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

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

当部署在 Docker 容器中时,服务器似乎正在运行,但应用程序仍然无法从外部访问

Docker 配置

用于部署的 Dockerfile 为:

# 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"]

部署步骤包括构建映像并运行暴露端口 5000 的容器:

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

调查

容器似乎正在按预期运行,并且Flask 服务器在容器内侦听端口 5000:

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

但是,从容器外部向应用程序发出的请求会导致空回复:

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

解决方案

问题在于 Flask 应用程序与本地主机接口的绑定。要使应用程序可以从容器外部访问,它应该绑定到 0.0.0.0 地址。

在 Flask 应用程序初始化中,将:

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

更改为:

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

此修改会将应用程序绑定到主机上的所有接口,使其可以从容器外部访问。

以上是为什么我的 Flask 应用部署到 Docker 后无法访问?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn