Flask应用Docker部署后端口从5888变为5000的问题咨询
问题原因分析
核心问题出在两种启动方式的本质差异:
- 本地运行时,你直接执行
python app.py,触发了代码里的if __name__ == "__main__"代码块,这里明确指定了port=5888,因此应用会以5888端口启动。 - Docker容器内采用
python3 -m flask run --host=0.0.0.0命令启动Flask,这种属于Flask的命令行启动模式,不会执行你代码里的if __name__ == "__main__"逻辑,而是默认使用Flask的内置默认端口5000,完全忽略了你在代码中设置的端口参数。
另外你的Dockerfile还有两处明显问题:
- WORKDIR使用了Windows风格路径
C:\Users\heman\PycharmProjects\dock_test\main.py,但容器基于Ubuntu镜像(Linux环境),该路径无效,应改为Linux风格路径,比如/app。 - ENV FLASK_APP指定为
main.py,但你的主代码文件是app.py,这会导致Flask找不到正确的应用入口,需修正为ENV FLASK_APP=app.py。
解决方法
可以任选一种方式修正:
方式一:修改启动命令,显式指定端口
将Dockerfile中的CMD指令改为:
CMD ["python3","-m","flask","run","--host=0.0.0.0","--port=5888"]
方式二:改用直接执行脚本的方式启动
修改Dockerfile的CMD为直接运行app.py:
CMD ["python3", "app.py"]
同时需要修改app.py中的启动代码,添加host="0.0.0.0"(否则容器外无法访问应用):
if __name__ == "__main__": app.run(debug=True, port=5888, host="0.0.0.0")
内容的提问来源于stack exchange,提问作者Hemanthkumar Yegireddi
相关产品推荐
相关产品推荐

