docker-compose的web服务退出码为0如何保持服务持续运行不退出
问题根因
容器退出返回状态码0代表主进程执行完成后正常退出,没有运行时错误,你遇到的问题核心是web服务对应的主进程没有作为常驻进程持续运行,执行完逻辑就直接结束了。
排查&修复步骤
- 检查
webapp.py的服务启动逻辑
这是最常见的诱因,确保你的web应用代码末尾包含常驻监听的启动逻辑,以Flask框架为例:
如果是其他web框架,确认启动逻辑没有配置为一次性任务(比如仅做数据初始化、打印日志后就结束)。if __name__ == '__main__': # 必须指定host为0.0.0.0才能允许宿主机访问,必须调用run方法启动常驻监听进程 app.run(host='0.0.0.0', port=5000, debug=True) - 修正Dockerfile语法问题
你提供的Dockerfile中安装依赖的命令存在语法错误,install和-r之间缺少空格,正确写法为:
如果本地文件确实存在该问题,修正后执行RUN pip install -r requirements.txtdocker compose build --no-cache重新构建镜像再启动。 - 临时保留容器方便调试
可以在docker-compose.yml的web服务配置中添加以下参数,避免容器直接退出,方便进入容器排查问题:
启动后执行web: build: . ports: - "5000:5000" tty: true stdin_open: truedocker compose exec web sh进入容器,手动运行python webapp.py查看输出,确认服务启动逻辑是否正常。
内容的提问来源于stack exchange,提问作者JHOAM SEBASTIAN MOLINA GARCIA
相关产品推荐
相关产品推荐

