You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Dockerfile以同时运行Flask服务与定时请求脚本?

解决Docker同时运行Flask服务和定时请求脚本的问题

原Dockerfile存在两个核心问题:

  • 多个CMD指令仅最后一个会生效,因此metricRequester.py &完全没被执行
  • 使用ENTRYPOINT ["python3"]这种exec格式时,CMD里的&不会被shell解析,无法实现后台运行脚本

方法一:使用启动脚本统一管理进程

  1. 在项目根目录创建start.sh启动脚本:
#!/bin/bash
# 后台运行定时请求脚本
python3 metricRequester.py &
# 前台启动Flask服务(保持容器运行)
python3 app.py
  1. 本地给脚本添加执行权限:
chmod +x start.sh
  1. 改写Dockerfile:
FROM ubuntu:18.04
RUN apt-get update -y && apt-get install -y python3 python3-pip

COPY ./requirement.txt /app/requirement.txt
WORKDIR /app
RUN pip3 install -r requirement.txt
COPY ./src /app
# 复制启动脚本并赋予执行权限
COPY start.sh /app/start.sh
RUN chmod +x /app/start.sh

EXPOSE 8022

# 以启动脚本作为容器入口
ENTRYPOINT ["/app/start.sh"]

方法二:直接在Dockerfile中用Shell命令启动

无需额外脚本,直接通过Shell命令同时启动两个进程:

FROM ubuntu:18.04
RUN apt-get update -y && apt-get install -y python3 python3-pip

COPY ./requirement.txt /app/requirement.txt
WORKDIR /app
RUN pip3 install -r requirement.txt
COPY ./src /app

EXPOSE 8022

# 用Shell执行命令,后台运行定时脚本,前台运行Flask服务
ENTRYPOINT ["bash", "-c"]
CMD ["python3 metricRequester.py & python3 app.py"]

额外注意事项

  • 确保metricRequester.py中的请求地址http://127.0.0.1:8022/正确,同一容器内的进程可通过127.0.0.1互相访问
  • Flask服务需监听0.0.0.0才能被容器外部访问(容器内访问不受影响),若app.py未配置,需补充:
if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8022)

内容的提问来源于stack exchange,提问作者HurlyBurly

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 03:45:33