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

Mic*_*ale 6 runit docker

我一直在运行docker进程(apps)

docker run …

但是runit supervision(runit就像daemontools) - 所以runit确保进程保持运行,传递信号等.

这合理吗?Docker似乎想要运行自己的妖魔化 - 但它并不像runit那样彻底.此外,当runit重新启动应用程序时 - 每次都会创建一个新容器(正常),但它会留下旧容器的痕迹 - 这似乎暗示我正在以错误的方式执行此操作.

docker不应该以这种方式运行吗?

如果我不是建立一个集装箱从图像中,只有一次,再有runit运行/监督该容器中所有的时间?

And*_*ndy 2

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

我不知道 runit所以无法给出具体的配置指导。但是您可能应该让进程管理器与 docker 守护进程进行通信,并检查给定的容器 ID 是否正在运行(docker ps | grep container_id或等效容器,或直接使用 Docker Remote API)。如果容器已停止,请使用 Docker 重新启动它 ( docker run container_id),而不是运行新容器。或者,如果您每次都需要一个新容器,那么首先在docker run -rm它退出或停止时自动清理它。

如果您不希望进程管理器轮询 docker,您可以运行监视docker events.

您可以在启动容器时获取container_id作为启动守护进程的返回值,或者您可以要求Docker将其写入文件(docker run -cidfile myfilename,如PID文件)

我希望对您有所帮助或帮助其他runit大师提供更详细的建议。