5

我是 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"]

开始.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”被打印并且 docker 容器退出。

4

3 回答 3

3

Docker 文档有如何做到这一点的示例。如果您使用的是 Python,那么 usingsupervisord是一个不错的选择。

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"]

与运行一堆后台进程相比,这样做的好处是您可以获得更好的作业控制,并且过早退出的进程将重新启动。

于 2018-02-01T17:12:55.387 回答
1

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

您可以尝试在后台运行其他所有内容,但随后

python demo.py

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

于 2018-01-30T13:02:17.487 回答
0

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

于 2018-01-31T15:23:42.777 回答