运行 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
- 相同的 shell 脚本在我进入终端和 运行 时起作用 运行。
- 在没有 nohup 的情况下尝试过,没有用。
- 尝试 python 子进程也启动其他 python 进程,但没有成功。
是否可以在没有 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"]
与 运行 一堆后台进程相比,它的优势在于您可以更好地控制作业,过早退出的进程将重新启动。
我是 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" 正在打印并且 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"]
与 运行 一堆后台进程相比,它的优势在于您可以更好地控制作业,过早退出的进程将重新启动。