【问题标题】:Kubernetes: Unable to create repositoryKubernetes:无法创建存储库
【发布时间】:2016-09-21 01:55:41
【问题描述】:

我正在关注Kubernete's getting started guide。一切都很顺利,直到我跑了

$ gcloud docker push gcr.io/<PROJECT ID>/hello-node:v1

(好吧,我的项目 ID 在哪里)。由于某种原因,Kubernetes 无法推送到注册表。这是我得到的:

Warning: '--email' is deprecated, it will be removed soon. See usage.
Login Succeeded
Warning: '--email' is deprecated, it will be removed soon. See usage.
Login Succeeded
Warning: '--email' is deprecated, it will be removed soon. See usage.
Login Succeeded
Warning: '--email' is deprecated, it will be removed soon. See usage.
Login Succeeded
Warning: '--email' is deprecated, it will be removed soon. See usage.
Login Succeeded
Warning: '--email' is deprecated, it will be removed soon. See usage.
Login Succeeded
Warning: '--email' is deprecated, it will be removed soon. See usage.
Login Succeeded
The push refers to a repository [gcr.io/kubernetes-poc-1320/hello-node]
18465c0e312f: Preparing 
5f70bf18a086: Preparing 
9f7afc4ce40e: Preparing 
828b3885b7b1: Preparing 
5dce5ebb917f: Preparing 
8befcf623ce4: Waiting 
3d5a262d6929: Waiting 
6eb35183d3b8: Waiting 
denied: Unable to create the repository, please check that you have access to do so.

关于我可能做错的任何想法?注意我已经跑了。 $ gcloud init,所以我已经登录了。

提前致谢!

【问题讨论】:

  • 我也遇到了同样的问题,但您在下面的回答没有帮助:[

标签: docker kubernetes google-cloud-platform


【解决方案1】:

编辑:几个月前这对我有用。新版本的 Kubernetes 可能没有这个问题,或者这个解决方案可能无法解决它:)

好的,在为此苦苦挣扎了几个小时后,我终于通过将我的标记从 image:version 符号更改为 image/version 将其推送到 grc.io 注册表,如下所示:

gcloud docker push gcr.io/<PROJECT ID>/hello-node/v1

阅读 Kubernetes 文档中的另一个指南后:https://cloud.google.com/container-registry/docs/pushing#pushing_to_the_registry

希望这会有所帮助!

【讨论】:

  • 我不建议这样做,因为它只会创建文件夹 v1, v2, ... v{n} 并且每个容器都会有最新的实际版本。我检查了文档,但不明白他们为什么推荐这个。我的问题归结为通过 Google 的 UI 创建 kubernetes 集群,而创建的 VM 没有对 GCR 存储桶的写入权限。然后我使用 CLI 配置了一个集群并且没有任何问题。示例命令:gcloud container clusters create my-special-cluster \ --num-nodes 3 \ --scopes "https://www.googleapis.com/auth/projecthosting,storage-rw"
  • 在提到的页面上我没有看到这个版本的使用提示。 :v1/v1 都不适合我 :-( docker login 运行成功。
【解决方案2】:

运行gcloud init 并查看您是否登录了正确的帐户。我曾经遇到过这个错误,因为我试图从不同的谷歌账户推送图片

【讨论】:

    【解决方案3】:

    如果您使用的是 GCE 实例,则需要确保它具有正确的 Cloud API 访问范围。 由于您无法编辑正在运行的实例的范围,因此您可以使用当前磁盘创建一个新实例。

    为此,请执行以下操作

    • 转到您的实例页面并单击编辑
    • 取消选中删除实例时删除启动盘,然后点击保存
    • 使用您以前的磁盘创建一个新实例,并具有对存储的写入权限。

    【讨论】:

    • 这是我遇到的问题。请注意,您现在可以向现有实例添加权限,而无需重新创建它们(只需关闭它们)。
    【解决方案4】:

    这在我的情况下解决了它:


    短版:

    https://console.cloud.google.comContainer Engine 屏幕中按Enable billing


    加长版:

    在我的情况下,由于在谷歌云平台控制台中设置结算出现问题,我收到了错误。

    虽然我输入了我所有的信用卡信息,我的Container Engine屏幕在google云平台控制台的屏幕上显示Container Engine is getting ready. This may take a minute or more.,但在我在同一屏幕上按下Enable billing之前它不起作用。然后gcloud docker push 命令终于奏效了。

    奇怪的是,后来返回Container Engine 屏幕后,它再次显示Container Engine is getting ready. This may take a minute or more. 和按钮Enable billing.. 一定是控制台中的错误。

    【讨论】:

    • 我在 Container Engine 屏幕上没有看到 Enable billing。检查 gcloud container clusters get-credentials 会给出错误 ResponseError: code=403, message=Required "container.clusters.get" permission for "projects/***
    • 我必须转到项目的仪表板,单击显示“资源”的框,在仪表板页面中间的那个框簇中显示“云存储”,然后 我看到了启用计费按钮。一旦我点击它,一切正常。这是最糟糕的用户界面。当您在该项目上尚未启用计费时,它应该就像一个大红色通知。
    • @BjornTipling 可能是我的回答后 UI 发生了变化(已经有半年了),但不幸的是不是更好。如果您确认这是当前的官方 UI,我可以参考它在我的回答中。
    【解决方案5】:

    我遇到了同样的错误,因为我不小心使用了项目 name 而不是自动生成的 idPROJECT_ID 可以通过以下方式找到:

    $ gcloud info
    

    以及在 Google Cloud 仪表板中:https://console.cloud.google.com/home/dashboard

    我意识到这很愚蠢,但我可以想象其他人也会犯同样的错误 :)

    【讨论】:

    • 非常感谢。我肯定认为我在做正确的项目。第一步:你的电脑开着了吗? ...
    【解决方案6】:

    确保您已通过 Google Cloud 进行身份验证。

    $ gcloud auth application-default login
    

    仔细检查gcloud 是否指向您当前的项目。

    $ gcloud config set project PROJECT_ID
    

    如果仍有问题,请运行gcloud info 并查看Last Log File。注意:gcloud auth login 不再写入应用程序默认凭据。

    【讨论】:

    • 这解决了我的问题,因为我不明白为什么我能够推送图像,然后几个小时后,我得到了错误,不得不重新运行 gcloud auth 来获取它再次工作。
    【解决方案7】:

    当使用docker-credential-helpers 在 OSX 钥匙串中存储 docker 凭据时,gcloud docker -- push $registry/$project_id/<image>:<tag> 也会失败。

    我的解决方案是恢复 ~/.docker/config.json 以不使用钥匙串安全地存储凭据

    另见:https://github.com/GoogleCloudPlatform/gcloud-common/issues/198

    【讨论】:

      【解决方案8】:

      https://stackoverflow.com/a/39996807/598513我回答切换用户/帐户

      gcloud auth list
      gcloud config set account example@gmail.com
      

      【讨论】:

        【解决方案9】:

        以上解决方案都不适合我,我终于找到了解决方案。我正在使用 Windows 10 并查看了我的 C:/Users//.docker/config.json 文件,它看起来像这样。

        {
            "auths": {
                "https://appengine.gcr.io": {},
                "https://asia.gcr.io": {},
                "https://b.gcr.io": {},
                "https://bucket.gcr.io": {},
                "https://eu.gcr.io": {},
                "https://gcr.io": {},
                "https://gcr.kubernetes.io": {},
                "https://us.gcr.io": {}
            },
            "credsStore": "wincred"
        }
        

        删除 "credsStore": "wincred" 行解决了问题!

        【讨论】:

          【解决方案10】:

          您使用什么作为项目 ID?它不应该是“my-kubernetes-codelab”,而应该是“my-kubernetes-codelab-234231”或任何你编号的版本。这是我的问题。

          【讨论】:

            【解决方案11】:

            对我来说,有同样的错误,我发现我一开始就错过了“gcloud”。那是因为前面两个命令都是用 docker 开头的,我只是看了一眼 docker 之后的变化。

            ~/gs-spring-boot/complete$ docker -- push gcr.io/kubernetes-codelab-1xxxxx/hello-java:v1
            

            正确:

            ~/gs-spring-boot/complete$ gcloud docker -- push gcr.io/kubernetes-codelab-1xxxxx/hello-java:v1
            

            【讨论】:

              猜你喜欢
              • 2015-08-19
              • 2018-06-06
              • 2015-12-27
              • 1970-01-01
              • 2016-01-08
              • 2014-03-10
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多