Docker部署Flask+Redis应用Flask退出码0 不修改app.py如何解决
问题根因
- docker-compose.yml中web-fe服务显式配置的
command: python app.py,会直接覆盖Dockerfile中定义的flask run启动命令 - 你的app.py没有
if __name__ == "__main__"启动逻辑,直接执行python app.py只会完成变量、路由加载后就结束进程,退出码0就是程序正常执行完毕的返回值 - 额外隐患:你配置的named volume挂载到了
/code目录,会覆盖容器构建阶段拷贝进去的代码,首次启动空volume时甚至会出现找不到app.py的问题
解决方法(无需修改app.py)
二选一即可:
方案1:删除docker-compose中覆盖的command字段
直接删掉web-fe服务里的command: python app.py配置行,容器会默认使用Dockerfile里定义的flask run命令启动,flask会自动读取FLASK_APP环境变量加载应用实例,保持进程常驻。
修改后的web-fe服务配置参考:
web-fe: build: . ports: - target: 5000 published: 5000 networks: - counter-net # 无代码持久化需求建议删除该volume挂载,避免后续镜像更新后代码被旧volume内容覆盖 # volumes: # - type: volume # source: counter-vol # target: /code
如果有本地开发热更新需求,可以改用bind mount挂载本地源码目录,不要用named volume挂载代码目录。
方案2:修改docker-compose的command为flask启动命令
如果你需要保留command配置,直接把值替换为Dockerfile中定义的启动命令即可:
command: ["flask","run","--host=0.0.0.0","--port=5000"]
修改完成后重新执行docker-compose up --build即可正常启动Flask服务。
内容的提问来源于stack exchange,提问作者user17007397
相关产品推荐
相关产品推荐

