首页 > 解决方案 > Cloud Build docker image 无法在本地写入文件 - 无法打开文件...权限被拒绝

问题描述

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

Cloud Build 步骤之一成功地从外部源加载了一个 docker 映像,它加载良好并成功报告了自己的帮助信息。但是在运行时,它会失败并显示错误消息:“无法打开文件“..intermediary_work_product_file。”权限被拒绝。

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

那么,如何向 Cloud Build 步骤中运行的应用授予读/写权限,以将其自己的中间工作产品写入本地文件夹?Cloud Build 本身使用服务帐户凭据运行良好。已尝试添加更多权限,包括 Storage、Cloud Run、Compute Engine、App Engine 管理员角色。但是同样的错误。

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

我必须忽略一些基本的东西。

标签: dockergoogle-cloud-platformgoogle-cloud-build

解决方案


此问题已通过更改 Dockerfile USER 解决,如@PRAJINPRAKASH在此有用的答案中 所建议的那样https://stackoverflow.com/a/62218160/4882696

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

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


推荐阅读