在Docker

时间:2018-01-30 12:54:32

标签: python shell docker dockerfile multiple-processes

我是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
  • 当我去终端并运行时,相同的shell脚本工作。
  • 尝试没有nohup,没有工作。
  • 尝试使用python子进程来启动其他python进程,但没有工作。

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

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

3 个答案:

答案 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通过套接字运行命令,重定向不会发生。