我一直在运行docker进程(apps)
码头运行…
但是在runit监督下(runit就像daemontools) – 所以runit确保进程保持运行,传递信号等.
这合理吗? Docker似乎想要运行自己的妖魔化 – 但它并不像runit那样彻底.此外,当runit重新启动应用程序时 – 每次都会创建一个新容器(正常),但它会留下旧容器的痕迹 – 这似乎暗示我正在以错误的方式执行此操作.
docker不应该以这种方式运行吗?
我应该只从图像中设置一个容器,只需一次,然后运行/监督该容器的所有时间吗?
最佳答案
Docker确实对守护程序容器进行了一些管理:如果系统关闭,那么当Docker守护程序启动时,它还将重启系统关闭时运行的所有容器.但是如果容器自行退出或者内核(或用户)在容器运行时杀死容器,则Docker守护程序将不会重新启动容器.如果您确实需要重新启动,则流程管理器是有意义的.
原文链接:https://www.f2er.com/docker/436054.html我不知道runit所以我不能给出具体的配置指导.但您应该让进程管理器与docker守护进程通信并检查给定的容器ID是否正在运行(docker ps | grep container_id或等效,或直接使用Docker Remote API).如果容器已停止,请使用Docker重新启动它(docker run container_id),而不是运行新容器.或者,如果您每次都想要一个新容器,那么从docker run -rm开始,在它退出或停止时自动清理它.
如果您不希望流程管理器轮询docker,则可以运行监视docker事件的内容.
您可以在启动容器时获取container_id作为启动守护程序的返回值,或者您可以让Docker将其写入文件(docker run -cidfile myfilename,如PID文件)
我希望能帮助或帮助另一位runit guru提供更详细的建议.