谷歌云运行启动容器之前,健康检查是健康的。

问题描述 投票:1回答:1

我有一个图像,启动时间比较长,大约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在这之前不会开始向您的新运行容器驱动流量。

docker flask gunicorn google-cloud-run
1个回答
1
投票

rodrigo-silveira的解决方案。

在我的案例中(使用Python+Gunicorn),我能够使用以下方法解决这个问题 "应用工厂" 模式。也就是说,从Gunicorn开始用

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

我的假设是,在该函数返回之前,Gunicorn还没有在它绑定的端口上监听,而Cloud Run不会开始向您的新运行容器发送流量,直到这种情况发生。

© www.soinside.com 2019 - 2024. All rights reserved.