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

如何在Docker镜像中同时运行两个含无限循环的Python脚本?

解决Docker中同时运行两个长期运行Python脚本的问题

问题根源

Dockerfile里的CMD指令只会执行最后一条,前面的会被自动覆盖,这就是你当前只有第二个脚本生效的原因。

可选解决方案

1. 使用Shell脚本启动多进程

写一个启动脚本,让第一个脚本后台运行,第二个脚本前台运行(保证容器不会因为进程退出而停止):

  • 在项目根目录创建start.sh文件:
#!/bin/bash
# 后台运行第一个脚本
python3 main.py btcusdt &
# 前台运行第二个脚本,维持容器存活
python3 Flask_API/api_main.py
  • 修改Dockerfile,添加脚本执行权限并指定启动命令:
FROM python:3.8

COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .

# 给启动脚本添加执行权限
RUN chmod +x start.sh
# 执行启动脚本
CMD ["./start.sh"]

2. 使用进程管理工具(如supervisord)

用supervisord统一管理多个进程,适合需要运行多个长期服务的场景:

  • 修改Dockerfile,安装supervisord并配置启动:
FROM python:3.8

COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
# 安装supervisord
RUN apt-get update && apt-get install -y supervisor
COPY . .

# 创建日志目录
RUN mkdir -p /var/log/supervisor
# 复制supervisor配置文件(需提前创建)
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf

# 启动supervisord
CMD ["/usr/bin/supervisord"]
  • 创建supervisord.conf配置文件,定义两个进程:
[supervisord]
nodaemon=true

[program:main-script]
command=python3 main.py btcusdt
stdout_logfile=/var/log/supervisor/main.log
stderr_logfile=/var/log/supervisor/main.err.log
autorestart=true

[program:flask-api]
command=python3 Flask_API/api_main.py
stdout_logfile=/var/log/supervisor/flask-api.log
stderr_logfile=/var/log/supervisor/flask-api.err.log
autorestart=true

3. 拆分两个独立Docker镜像(推荐最佳实践)

如果两个脚本是独立的服务,拆分镜像更符合Docker的单进程设计原则,后续维护、扩展和日志管理都会更方便:

  • 为main.py创建单独的Dockerfile.main:
FROM python:3.8

COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY main.py .

CMD ["python3", "main.py", "btcusdt"]
  • 为Flask API创建Dockerfile.api:
FROM python:3.8

COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY Flask_API/ ./Flask_API/

CMD ["python3", "Flask_API/api_main.py"]
  • 分别构建两个镜像并独立运行即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 21:24:27