通过Cloud Run下载大文件时出现500内部服务器错误

时间:2020-03-03 21:04:18

标签: google-cloud-platform google-cloud-run

为测试目的构建了一个包含30GB以上的单个文件的巨大映像之后,将映像部署到Cloud Run中后,我无法下载相同的文件。

请明确说明,该映像确实可以在Cloud Run上构建并运行,但是由于某种原因该特定的大文件不可用。

以下是一个示例Dockerfile来重现此错误:

FROM python:3
WORKDIR /app
RUN touch test # downloading this file works fine
RUN dd if=/dev/urandom of=file bs=1M count=32768 # this one takes a while to build and to deploy, and won't be downloadable later on.
EXPOSE 8080
CMD python -m http.server 8080 --bind 0.0.0.0

尝试通过wget下载文件将返回以下内容:

wget https://cloud-run-link-here.app/file
--2020-03-03 17:19:16--  https://cloud-run-link-here.app/file
Loaded CA certificate '/etc/ssl/certs/ca-certificates.crt'
Resolving cloud-run-link-here.app (bigdocker-7k3mrt42la-uc.a.run.app)... :::::0, 0.0.0.0
Connecting to cloud-run-link-here.app (cloud-run-link-here.app)|:::::0|:443... connected.
HTTP request sent, awaiting response... 500 Internal Server Error
2020-03-03 17:19:17 ERROR 500: Internal Server Error.

在本地进行相同的操作就可以了。

如下面的图片所示,Cloud Run的日志上没有有用的信息。 Cloud Run logs

1 个答案:

答案 0 :(得分:3)

Python标准库中的maximum response size for Cloud Run is 32MB和HTTP服务器是not recommended for production use。很有可能它不是试图对非常大的请求进行分块并失败。

您应该考虑改用生产HTTP服务器,例如gunicorn