Cloud Build docker 图像无法在本地写入文件 - 无法打开文件...权限被拒绝

Cloud Build docker image unable to write files locally - fail to open file... permission denied

使用服务帐户凭据,我在 运行ning Cloud Build 中成功启动了 gsutil,将文件从 gs 移动到实例中,然后将它们复制回来。一切都很好。

云构建步骤之一成功从外部源加载 docker 图像,它加载正常并成功报告自己的帮助信息。但是当 运行 时,它会失败并显示错误消息: “无法打开文件“..intermediary_work_product_file。”权限被拒绝。

对于我在此步骤中 运行ning 的应用程序,当无法将文件写入其默认位置时,通常会产生此错误。我设置了 dir = "/workspace" 以确认默认值。

那么,如何在 Cloud Build 步骤中向应用 运行ning 授予 read/write 权限,以将其自己的中间工作产品写入本地文件夹? Cloud Build 本身 运行ning 使用服务帐户凭据很好。已尝试添加更多权限,包括存储、云 运行、计算引擎、App 引擎管理员角色。但是同样的错误。

我假设用于创建实例的凭据传递到 运行 时间。深入研究了 GCP CloudBuild 文档和示例,但没有找到答案。

一定有一些基本的东西我忽略了。

按照@PRAJINPRAKASH in this helpful answer

的建议,通过更改 Dockerfile USER 解决了这个问题

试图通过系统地测试 GCP 服务和角色权限来解决这个问题。所有测试的服务帐户凭据都能够创建容器实例,并且 运行 gcloud 或 gutil 很好。但是,自定义应用程序创建了容器,但在对默认共享 / 工作区执行本地写入时失败。

使用 GCP Cloud Build 时,本地 read/write 权限不会从默认服务帐户“传递”到 运行 时间实例。文档对此并不清楚。

我在使用 Cloud Build 构建我的 React 应用程序时遇到了这个问题,我无法全局安装 node-sass...

所以我尝试 chown 递归地从 /usr 目录到 nobody:nogroup,它成功了。我不知道是否有其他更好的解决方案,但重要的是,它解决了我的问题。