我是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"正在打印和停靠器容器退出。
答案 0 :(得分:2)
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"]
这比运行大量后台进程的优势在于您可以获得更好的作业控制,并且可以重新启动过早退出的进程。
答案 1 :(得分:1)
你的问题是把一切都放在后台。您的容器启动,执行所有命令,然后在CMD进程完成时退出 - 尽管后台进程正在运行。 Docker不知道这一点。
您可以尝试在后台运行其他所有内容,然后
python demo.py
原样。假设demo.py没有退出,这将导致进程保持活动状态。
答案 2 :(得分:0)
您也可以在分离模式下运行或将nohup重定向到log / nohup.out,因为默认的docker通过套接字运行命令,重定向不会发生。