【问题标题】:Running Multiple python processes in Docker在 Docker 中运行多个 python 进程
【发布时间】:2018-01-30 12:54:32
【问题描述】:

我是 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 容器退出。

【问题讨论】:

    标签: python shell docker dockerfile multiple-processes


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      python demo.py
      

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-09-14
          • 2022-01-20
          • 1970-01-01
          • 2019-07-16
          • 1970-01-01
          • 1970-01-01
          • 2017-03-26
          • 1970-01-01
          相关资源
          最近更新 更多