本地容器以正确的图像 content-type 响应,但一旦托管在云端,相同的容器 returns 和 html content-type

Local container responds with correct image content-type, but once hosted on gcloud, the same container returns an html content-type

我有一个 Docker 容器,它托管一个快递站点。它所做的只是 运行 清晰 - 并调整图像大小。

这完全没问题。我在本地 运行 这个容器,它完全符合我的要求。

但是,当我使用 gcloud run buildgcloud run deploy 将此映像部署到 gcloud (Google 运行) 时,容器部署正常,我可以访问它,但现在 URL 与我在本地 运行 完全相同(除了换出域),它 returns 图像乱码为 content-type html。这是来自 DevTools 在响应 headers.

中查看“网络”选项卡
content-length: 4990
content-type: text/html
date: Fri, 24 Jul 2020 06:11:44 GMT
server: Google Frontend
status: 200
x-powered-by: Express

这是我在本地 运行 容器时看到的响应。

Connection: keep-alive
Date: Fri, 24 Jul 2020 06:20:21 GMT
Transfer-Encoding: chunked
X-Powered-By: Express

我不明白我怎么能得到不同的响应(不考虑任何额外的人工制品 headers Google 可能会添加)- 当它是同一个容器时我是 运行宁?特别是因为 gcloud 导致 text/html,当我使用本地容器时,我在浏览器中看到调整大小的图像。

有什么想法可以让我看看吗?正如我所说 - 如果我 运行 容器在本地使用 Docker.

它会完美地工作

测试URL是:

https://image-processor-74rmztaj4a-uc.a.run.app/test

对于它的价值,相关的快速路线是,但正如我所说 - 实际代码没有真正的问题......更多的是部署到 Google 云 运行 ...

const sharp = require("sharp");
const express = require("express");
const fs = require("fs");

const app = express();

app.get("/test", (req, res) => {
  const transform = sharp()
    .resize(200, 200, { fit: "inside" })
    .toFormat("jpeg");

  const readStream = fs.createReadStream("./src/image.jpg");

  return readStream.pipe(transform).pipe(res);
});

const port = process.env.PORT || 8080;
app.listen(port);

看起来内容类型被 Cloud 运行 修改了,但这种情况下的解决方案只是为响应指定内容类型以使其按预期工作。