我遇到了和 OP 一样的问题。在 Docker 中使用 flex 环境(其中一些也适用于标准环境)(runtime: custom in app.yaml)我终于解决了这个问题!我尝试了很多东西,但不确定是哪一个修复了它(或者它是否是一个组合),所以我将在这里列出我所做的事情,最有可能的解决方案首先列出。
解决方案 1) 确保云存储删除旧版本
云存储与什么有什么关系? (我听到你问了)
有一个小工具提示 (Google Cloud Platform Web UI (GCP) > App Engine > Versions > Size),当您将鼠标悬停在它上面时会显示:
(Google App Engine) 柔性环境代码从谷歌云存储存储和计费... yada yada yada
因此,基于此信息和this answer,我访问了GCP > Cloud Storage > Browser,发现了我的存储桶和大量我不知道存在的其他存储桶。事实证明,一些存储桶存储缓存的云功能代码,一些存储缓存的 docker 图像,还有一些存储其他缓存的代码/东西(您可以通过浏览存储桶来判断哪个是哪个)。
所以我给所有的bucket(除了云函数bucket)添加了一个删除策略如下:
转到GCP > Cloud Storage > Browser 并单击Lifecycle Rules 列中的链接(用于相关存储桶)> 单击添加规则> 那么:
对于 SELECT ACTION,选择“删除对象”并单击继续
对于 SELECT OBJECT 选择“更新版本数”并在输入中输入 1
点击创建
这将使您返回表格视图,您现在应该会在生命周期规则列中看到该规则。
对所有相关存储桶重复此过程(相关存储桶已在前面描述过)。
然后删除相关存储桶的内容。 警告:有些存储桶会警告您不要删除存储桶本身,只删除其中的内容!
现在重新部署,您的最新版本现在应该已部署,希望您再也不会遇到此问题!
解决方案 2) 使用部署标志
我添加了这些flags
gcloud app deploy --quiet --promote --stop-previous-version
这可能没有帮助,因为这些标志似乎是默认的,但值得添加以防万一。
请注意,仅对于标准环境(我听说过小道消息),您还可以使用 --no-cache 标志,这可能有助于使用 flex,但此标志会导致部署失败(当我尝试时)。
解决方案 3)
这可能根本没有帮助,但我补充说:
COPY app.yaml .
到 Dockerfile
提示 1)
这可能比修复更有用/有用的调试方法。
访问GCP > App Engine > Versions
这会显示您应用的所有版本(每个部署 1 个),还显示每个实例正在运行的版本(实例在 app.yaml 中配置)。
确保所有实例都运行最新版本。这应该默认发生。可能值得删除旧版本。
您可以从gcloud app deploy 日志(在日志开头)确定您的版本,但似乎这些版本无论如何都是按部署顺序列出的(最新的在顶部)。
提示 2)
访问GCP > App Engine > Instances
SSH 进入一个实例。这只是点击几个按钮的问题(见下面的截图)。运行 SSH 后:
docker exec -it gaeapp /bin/bash
这将使您进入运行代码的 docker 容器。现在您可以四处浏览以确保它具有您的最新代码。
嗯,我想我的答案现在已经够长了。如果这有帮助,请不要感谢我,J-ES-US 是你应该感谢的人 ;) 我属于他 ^^