即使对于码头工人环境,Supervisord也是非常棒的工具.它对stderr重定向和信号转发有很大帮助.但它有一些缺点:
>它不支持延迟启动.在主应用程序初始化之前,延迟某些代理启动可能很有用.优先权无法解决此问题.
>如果某个应用程序进入FATAL状态,则supervisord只记录它,但继续工作.因此,在查看容器日志之前,您无法看到它.如果supervisord刚停止,它可能会更友好,因为在这种情况下你会看到docker ps -a的问题
那么supervisord的最佳替代方案是什么?
Runit uses less memory than Supervisord because Runit is written in C and Supervisord in Python.
And in some use cases,process restarts in the container are preferable over whole-container restarts.
有关更多信息,请参见phusion/baseimage-docker
图像.
如Torsten Bronger在the comments所述:
Runit is not there to solve the reaping problem.
Rather,it’s to support multiple processes. Multiple processes are encouraged for security (through process and user isolation).
自2015年起,您现在可以Specify an init process that should be used as the PID 1 in the containe,with docker run --init
The default
init
process used is the firstdocker-init
executable found in the system path of the Docker daemon process.
Thisdocker-init
binary,included in the default installation,is backed by 07006.