运行 Docker 中的多个 python 进程

Running Multiple python processes in Docker

我是 docker 的新手,试图在 docker 中 运行 多个 python 进程。 虽然不推荐,但它应该按照此处的建议工作“https://docs.docker.com/engine/admin/multi-service_container/

我的 Dockerfile :

FROM custom_image
MAINTAINER Shubham 
RUN apt-get update -y
COPY . /app
WORKDIR /app
RUN pip install -r requirements.txt
ENTRYPOINT ["/bin/bash"]
CMD ["start.sh"]

start.sh :

nohup python flask-app.py &
nohup python sink.py &
nohup python faceConsumer.py &
nohup python classifierConsumer.py &
nohup python demo.py &
echo lastLine

运行 命令:

docker run --runtime=nvidia -p 5000:5000 out_image

是否可以在没有 supervisord 或 docker-compose 的情况下 运行 多个进程?

更新:没有收到任何错误,只有 "lastLine" 正在打印并且 docker 容器退出。

您的问题是将所有内容置于后台。您的容器启动,执行所有命令,然后在 CMD 进程完成时退出 - 尽管有后台进程 运行。 Docker 不知道。

您可以在后台尝试 运行 其他一切,然后

python demo.py

原样。假设 demo.py 不退出,这将导致进程保持活动状态。

您还可以 运行 在分离模式下或默认将 nohup 重定向到 log/nohup.out docker 运行s 通过套接字的命令,重定向不会发生.

Docker docs 有如何执行此操作的示例。如果您使用 Python,那么使用 supervisord 是一个不错的选择。

FROM ubuntu:latest
RUN apt-get update && apt-get install -y supervisor
RUN mkdir -p /var/log/supervisor
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
COPY my_first_process my_first_process
COPY my_second_process my_second_process
CMD ["/usr/bin/supervisord"]

与 运行 一堆后台进程相比,它的优势在于您可以更好地控制作业,过早退出的进程将重新启动。