在runit / daemontools监督下运行docker进程是合理的

我一直在运行docker进程(应用程序)

docker运行…

但是在runit监督下(runit就像daemontools) – 所以runit确保进程保持运行,传递信号等。

这是合理的吗? Docker似乎想要运行自己的守护进程,但并不像runit那么彻底。 而且,当runit重新启动应用程序时,每次都会创build一个新的容器(好),但是会留下旧容器的痕迹 – 这似乎意味着我正在做错误的方式。

docker工不应该这样运行吗?

我是否应该从图像设置一个容器,一次,然后让runit运行/监督那个容器的所有时间?

Docker确实对守护程序容器进行了一些pipe理:如果系统closures,那么当Docker守护进程启动时,它也将重新启动在系统closures时运行的所有容器。 但是,如果容器自行退出,或者内核(或用户)在运行时终止容器,则Docker守护进程将不会重新启动它。 如果您确实需要重新启动,则stream程pipe理器是有意义的。

我不知道runit所以我不能给出具体的configuration指导。 但是你应该让进程pipe理器和docker守护进程进行通信,并检查一个给定的容器标识是否正在运行( docker ps | grep container_id或者等价物,或者直接使用Docker Remote API)。 如果容器已停止,请使用Docker重新启动它( docker run container_id ),而不是运行新的容器。 或者,如果你每次都需要一个新的容器,那么从docker run -rm开始,当它退出或停止时自动清理它。

如果您不希望stream程pipe理器轮询docker,则可以运行一些docker events东西。

当你启动容器作为启动守护进程的返回值时,你可以得到container_id,或者你可以让Docker docker run -cidfile myfilename ,就像一个PID文件)

我希望帮助或帮助另一位runit大师提供更详细的build议。