我一直在通过运行docker进程(apps)
docker run …
但是在runit supervision下(runit就像daemontools一样)-因此runit确保进程保持正常运行,传递信号等。

这合理吗? Docker似乎想运行自己的妖魔化-但它不像runit那样彻底。此外,当runit重新启动应用程序时-每次都会创建一个新容器(很好),但是留下了旧容器的痕迹-这似乎暗示我做错了方式。

docker 不应该这样运行吗?

我是否应该只从镜像中设置一个容器一次,然后让runit始终运行/监督该容器?

最佳答案

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专家有所帮助或提供更详细的建议。

关于docker - 在runit/daemontools监督下运行docker进程是否合理?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19705513/

10-16 18:01
查看更多