【问题标题】:docker push to Google Container Registry errors "Caller does not have permission 'storage.buckets.create'"docker push to Google Container Registry 错误“调用者没有权限‘storage.buckets.create’”
【发布时间】:2019-06-27 01:15:34
【问题描述】:

将我的映像推送到 Container Registry 时遇到权限问题。我得到的错误是

denied: Token exchange failed for project '<my project>'. Caller does not have permission 'storage.buckets.create'. To configure permissions, follow instructions at: https://cloud.google.com/container-registry/docs/access-control

我按照说明一步一步做的,这是我所做的:

  1. gcloud auth configure-docker

我的 docker config.json 现在包含:

{
  "auths": {},
  "credHelpers": {
    "gcr.io": "gcloud",
    "us.gcr.io": "gcloud",
    "eu.gcr.io": "gcloud",
    "asia.gcr.io": "gcloud",
    "staging-k8s.gcr.io": "gcloud",
    "marketplace.gcr.io": "gcloud"
  },
  "credsStore": "wincred",
  "HttpHeaders": {
    "User-Agent": "Docker-Client/18.09.0 (windows)"
  },
  "stackOrchestrator": "swarm"
}
  1. 标记我的图片docker tag my/image eu.gcr.io/&lt;my project&gt;/my-image:latest

  2. 运行docker push eu.gcr.io/&lt;my project&gt;/my-image:latest(出现错误)

这是我的设置

  • Windows 10(10.0.17134 Build 17134)
  • Docker 版本 18.09.0,构建 4d60db4
  • Google Cloud SDK 232.0.0、bq 2.0.40、核心 2019.01.27、gsutil 4.35

我已检查我的活动帐户是否正确(gcloud auth login 指向正确的登录电子邮件)并且该帐户具有所有者权限。我也试过专门为帐户添加存储管理员权限,但无济于事。

请帮我推一下我的图片!

【问题讨论】:

  • 嗯 :-( 这对你有用吗?我不确定为什么这不起作用,因为你似乎遵循了正确的过程。我从来没有在 Windows 上使用过这个,想知道什么时候config.json 配置错误。使用此帐户可以创建 GCS 存储桶吗?(gsutil mb -p &lt;my project&gt; gs://&lt;some bucket name&gt;)。您可以在显式 docker 登录后推送吗?(cloud.google.com/container-registry/docs/…
  • 我可以使用gsutils mb 命令创建新的存储桶,是的。但你只是给我指出了一个有趣的方向。我管理两个 Google Cloud 帐户。虽然我使用账户 1 登录并且可以在该账户下创建存储桶,但我只是成功地将我的镜像(在使用相应的项目名称标记后)推送到另一个账户下的 Container Registry。我假设使用gcloud auth login 切换帐户将处理所有事情,但似乎并非如此。你(或其他人)能帮我理解如何纠正这个问题吗?
  • 您可能使用多个 Google 帐户登录。要列出有凭据的帐户,请使用 gcloud auth list。这将用星号指示当前选择的帐户。要在有凭据的帐户之间切换,请使用 gcloud config set account &lt;email-address&gt;
  • gcloud auth list 显示两个帐户,星号指向正确的帐户。我很困惑为什么我能够将 docker push 推送到未选择的帐户。
  • 你的配置我不清楚。您不会推送到账户,而是推送到由账户管理的项目中的存储桶。从工作场景向后工作以查看问题所在可能对您有所帮助。

标签: docker gcloud google-container-registry


【解决方案1】:

尝试将项目标志 --project=&lt;&lt;PROJECT-ID&gt;&gt; 传递给您的命令。如果您管理多个项目gcloud 可能会缓存错误的权限。

【讨论】:

    【解决方案2】:

    一个潜在的原因是活动的 gcloud PROJECT_ID 与您推送到的注册表不匹配。

    gcloud config set project <PROJECT_ID>
    gcloud builds submit --tag gcr.io/<PROJECT_ID>/foo
    

    如果项目实际上不同,请确保 PROJECT_ID 匹配或在 IAM 中提供访问权限。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-02
      • 1970-01-01
      • 2021-04-06
      • 2019-01-24
      • 2020-04-23
      • 2022-07-13
      相关资源
      最近更新 更多