首页 > 解决方案 > Google Cloud Run 在 Healthcheck 正常之前启动容器

问题描述

我的图像启动时间相对较长,约为 5 秒。换句话说,Flask 服务器已经启动并正在运行,但是我将一些数据加载到全局变量中,所以此时服务器并没有真正运行。如果我在此期间 ping 我的 Google Cloud Run 端点,连接将超时

upstream request timeout

为了避免这种情况,我添加了一个 docker healthcheck 来调用我服务器中的端点。此 http 请求的超时时间为 2 秒。如果超时,则意味着服务器仍在加载这些全局文件,并且端点还没有准备好接收请求。这在开发中运行良好,但在 Cloud Run 中却不行。Cloud Run 在完成加载之前开始向我的服务器提供流量 - 随后,在容器 HEALTHCHECK 状态实际上是“健康”之前。

我的问题

如何延迟 Cloud Run 将流量传输到我的容器,直到它完全设置好?

编辑 > 回答

就我而言(使用 Python + Gunicorn),我能够使用“应用程序工厂”模式来解决这个问题。也就是说,启动 Gunicorn

$ gunicorn 'test:create_app()'

函数create_app()返回 Flask 应用程序的位置。

我关于为什么会这样的假设是因为在该函数返回之前,Gunicorn 还没有监听它绑定​​到的端口,并且 Cloud Run 不会开始将流量引导到新运行的容器,直到这种情况发生。

标签: dockerflaskgunicorngoogle-cloud-run

解决方案


rodrigo-silveira 的解决方案:

就我而言(使用 Python + Gunicorn),我能够使用“应用程序工厂”模式解决这个问题。也就是说,启动 Gunicorn

$ gunicorn 'test:create_app()' 函数 create_app() 返回 Flask 应用程序。

我对为什么会这样的假设是因为在该函数返回之前,Gunicorn 还没有监听它绑定​​到的端口,并且 Cloud Run 不会开始将流量引导到您正在运行的新容器,直到这种情况发生。


推荐阅读