docker - 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 文档和示例,但没有找到答案。
我必须忽略一些基本的东西。
解决方案
此问题已通过更改 Dockerfile USER 解决,如@PRAJINPRAKASH在此有用的答案中 所建议的那样https://stackoverflow.com/a/62218160/4882696
试图通过系统地测试 GCP 服务和角色权限来解决这个问题。测试的所有服务帐户凭据都能够创建容器实例,并且可以正常运行 gcloud 或 gutil。但是,自定义应用程序创建了容器,但在对默认共享 /workspace 进行本地写入时失败。
使用 GCP Cloud Build 时,本地读/写权限不会从默认服务帐户“传递”到运行时实例。文档对此并不清楚。
推荐阅读
- sql - SQL中左连接的多行是唯一匹配的行
- python - 在小型网络中共享脚本的正确方法
- python - 检查输入文件行中的字符,如果它们仅包含有效字符则返回
- node.js - 在 Kali Linux docker 映像上安装 NodeJS 时遇到问题
- git - 自创建 Git 存储库以来,如何从 TFS 对 Git 进行更改?
- php - PHP表单验证:表单将提交,无论它是否通过验证
- python - 文件迭代不返回文件中的数据
- json - 使用查找表的 Hive 查询
- php - 将本机上传图像反应到 php
- git - 如何使用 Kubernetes 和 Helm 为 Jenkins Blue Ocean 设置 SSH 密钥