1

我正在尝试将chromedp/headless-shell部署到 Cloud Run。

这是我的 Dockerfile:

FROM chromedp/headless-shell
ENTRYPOINT [ "/headless-shell/headless-shell", "--remote-debugging-address=0.0.0.0", "--remote-debugging-port=9222", "--disable-gpu", "--headless", "--no-sandbox" ]

我用来部署到 Cloud Run 的命令是

gcloud run deploy chromedp-headless-shell --source . --port 9222

问题

当我走这条路/json/list时,我希望看到这样的东西

    [{
       "description": "",
       "devtoolsFrontendUrl": "/devtools/inspector.html?ws=localhost:9222/devtools/page/B06F36A73E5F33A515E87C6AE4E2284E",
       "id": "B06F36A73E5F33A515E87C6AE4E2284E",
       "title": "about:blank",
       "type": "page",
       "url": "about:blank",
       "webSocketDebuggerUrl": "ws://localhost:9222/devtools/page/B06F36A73E5F33A515E87C6AE4E2284E"
    }]

但相反,我收到此错误:

主机标头已指定且不是 IP 地址或 localhost。

我的配置有问题还是 Cloud Run 不是部署它的理想选择?

4

1 回答 1

1

此特定问题并非 Cloud Run 独有。它源于 Chrome DevTools 协议中的现有更改,该更改在远程访问时会生成此错误。这可以归因于针对某些类型攻击的安全措施。您可以在此处查看相关的 Chromium 拉取请求。

chromedp/headless-shell使用您的配置将容器部署到 Cloud Run,但也收到了相同的错误。现在,在 GitHub 问题中有一条有用的评论,通过传递标头显示了问题的解决方法HOST:localhost。虽然这在我本地测试时确实有效,但它在 Cloud Run 上不起作用(返回 404 错误)。此 404 错误可能是由于 Cloud Run 如何利用 HOST 标头将请求路由到正确的服务。

不幸的是,这个答案不是解决方案,但它揭示了您所看到的内容和原因。我会选择使用与 GCP 不同的服务,例如纯虚拟机且管理较少的 GCE。

于 2022-02-05T00:07:02.770 回答