【问题标题】:`docker-credential-gcloud` not in system PATH`docker-credential-gcloud` 不在系统路径中
【发布时间】:2018-09-21 15:25:20
【问题描述】:

在对 gcloud 和 docker 进行最新更新后,我无法访问我的 google 容器存储库中的图像。在本地运行时:gcloud auth configure-docker 按照更新 gcloud 后的说明,我收到以下消息:

WARNING: `docker-credential-gcloud` not in system PATH.
gcloud's Docker credential helper can be configured but it will not work until this is corrected.
gcloud credential helpers already registered correctly.

运行which docker-credential-gcloud 返回docker-credential-gcloud not found

我没有其他与 gcloud 相关的路径问题,而且我一生都无法弄清楚如何将 docker-credential-gcloud 安装/添加到路径。这是我安装的(通过gcloud version 显示):

Google Cloud SDK 197.0.0
beta 2017.09.15
bq 2.0.31
container-builder-local
core 2018.04.06
docker-credential-gcr
gsutil 4.30

我也有 Docker CE 版本 18.03.0-ce-mac60 (23751)。

这是我的 $PATH:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

我还在原始 gcloud 安装中运行了 source /usr/local/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/path.zsh.inc

【问题讨论】:

  • 你是如何安装gcloud的? docker-credential-gcloud 通常应与 gcloud 本身位于路径上的同一文件夹中。
  • 另外,如果你已经有docker-credential-gcr,你可以继续使用它,假设docker-credential-gcr configure-docker可以正常工作...
  • 看起来我唯一缺少的步骤是完全关闭终端并重新启动......愚蠢的错误。感谢您对此进行调查:)
  • 我实际上安装了docker-credential-gcr,因为docker-credential-gcloud 没有与gcloud 位于同一位置。仍然对如何解决这个问题的答案感兴趣......
  • 太好了,很高兴您找到了根本原因。我猜docker-credential-gcr 给了你错误,因为 gcloud SDK 的 bin 目录在你重新安装过程中被清除了。

标签: docker google-cloud-platform gcloud google-kubernetes-engine google-container-registry


【解决方案1】:

从未找到直接解决docker-credential-gcloud 问题的方法,但以下内容让我重新启动并运行。警告:以下将删除所有现有的 docker 镜像并安装一堆 gcloud 实用程序:

  1. gcloud components install docker-credential-gcr,
  2. 完全重启终端
  3. docker-credential-gcr configure-docker.
  4. screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty

  5. umount /var/lib/docker/overlay2

  6. rm -rf /var/lib/docker
  7. 完全重启终端。

【讨论】:

  • 在执行语句 3 时,我们收到了这个警告。有什么顾虑吗? “...警告:无法执行 docker version:退出状态 1 如果未安装 docker,或者无法访问 dockerd,则这是预期的...”
  • 我不记得遇到过这种情况,但接受的答案比我认为的这个更有意义
【解决方案2】:

Homebrew Cask 似乎真的有点像。我卸载了木桶,然后通过手动 downloading the tar ball 重新安装了 Google Cloud SDK,并按照那里的描述运行了打包的安装脚本。

现在docker-credential-gcloud 在我的路上:

$ which docker-credential-gcloud
/Users/moritz/google-cloud-sdk/bin/docker-credential-gcloud

【讨论】:

  • 这对我有用。看在上帝的份上,我找不到可执行文件,正要克隆并运行 repo。提取运行后:./google-cloud-sdk/bin/gcloud init 然后 ./google-cloud-sdk/bin/gcloud components install docker-credential-gcr 然后只需将 bin 添加到您的 $PATH
【解决方案3】:

注意:以下所有docker-credential-gcr都可以替换为docker-credential-gcloud。我认为这只是 gcloud 的不同版本,我可能错了。

我也使用 Homebrew Cask 来安装 gcloud。我用

安装了docker-credential-gcr
$ gcloud components install docker-credential-gcr

然后就像你说的,which docker-credential-gcr 没有给你任何东西。

所以我运行which gcloud 发现/usr/local/bin 中有一个指向gcloud 的符号链接。这个符号链接是 Homebrew 在您首先安装 gcloud 时创建的。现在 docker-credential-gcr 不是由 Homebrew 安装的,而是由 gcloud 本身安装的,所以没有符号链接。

我打电话给readlink /usr/local/bin/gcloud,发现gcloud安装在/usr/local/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/bin/中。

然后:

$ ls /usr/local/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/bin

您应该会在此处看到docker-credential-gcr

我只是把它链接到/usr/local/bin:

$ ln -s \
    /usr/local/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/bin/docker-credential-gcr \
    /usr/local/bin/

然后运行:

$ docker-credential-gcr configure-docker

应该会成功。

【讨论】:

  • 这个答案几乎对我有用,但需要调整。符号链接步骤似乎有一个过时的/错字。它引用了docker-credential-gcr 而不是docker-credential-gcloud。如下更新该步骤对我有用。 $ ln -s /usr/local/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/bin/docker-credential-gcloud /usr/local/bin/
  • 感谢 Jumand 注意到它。这是纯类型。我正在纠正它。
  • 我刚刚检查过了。在我的机器上它是 docker-credential-gcr。我跑了gcloud components list docker-credential-gcloud 不存在。我不知道发生了什么。
  • @jumand - 我认为docker-credential-gcr 是新工具,-gcloud 是已弃用的工具。见cloud.google.com/container-registry/docs/…
  • 对我来说不是/usr/local/Caskroom/,而是/snap/(使用ubuntu)
【解决方案4】:

当我尝试从 Google Cloud Build SSH 到引擎虚拟机实例时遇到问题,所以我遇到了

steps:
- name: 'gcr.io/cloud-builders/gcloud'
  args: ['compute', 'ssh',
         '--project', '$PROJECT_ID',
         '--zone', 'asia-southeast1-b',
         '--strict-host-key-checking=no',
         'username@instance-1',
         '--command' ,'sh start.sh'

我的start.sh

#!/bin/sh

echo "Started: $(date --iso-8601=seconds)"

docker pull gcr.io/aaa/bbbc/cccc

echo "Finished: $(date --iso-8601=seconds)"

问题是How to set PATH when running a ssh command?

https://unix.stackexchange.com/questions/332532/how-to-set-path-when-running-a-ssh-command

【讨论】:

    【解决方案5】:

    新版 google-cloud-sdk 只有docker-credential-gcr,而不再有docker-credential-gcloud。另一方面,我的一个 python 包总是请求docker-credential-gcloud

    解决方案是将docker-credential-gcloud 符号链接到docker-credential-gcr

    ln -s /path/to/google-cloud-sdk/bin/docker-credential-gcr /usr/local/bin/docker-credential-gcloud
    

    ls -l /usr/local/bin | grep docker 现在应该打印:

    ...
    docker-credential-gcloud -> /path/to/google-cloud-sdk/bin/docker-credential-gcr
    ...
    

    【讨论】:

      【解决方案6】:

      所以我刚刚遇到了同样的问题,我试图将图像从 GCR 拉到 GCP 实例并想分享我的解决方案。

      我跑了gcloud auth configure-docker,得到了警告:

      WARNING: `docker-credential-gcloud\` not in system PATH.
      gcloud's Docker credential helper can be configured but it will not work until this is corrected.
      

      我为此线程应用了已接受的答案并运行gcloud components install docker-credential-gcr 并得到一个很长的错误:

      ERROR: (gcloud.components.install) You cannot perform this action because this Cloud SDK installation is managed by an external package manager.
      Please consider using a separate installation of the Cloud SDK created through the default mechanism described at: https://cloud.google.com/sdk/
      

      当没有解决方案有效时,我卸载了 Google 提供的 google-cloud-sdk 软件包,该软件包通过 snap 安装并安装了发行版特定软件包管理器,对我来说是 apt-get,按照 Installing Google Cloud SDK: Installation options 页面中的说明,然后重新-运行gcloud auth configure-docker,这次它解决了我的问题。

      【讨论】:

        【解决方案7】:

        刚刚在 Windows 上遇到了同样的问题,使用 Linux 容器运行 Docker,Docker 引擎 v19.03.8。使用码头工人撰写。我不将 gcloud 用于我的 dockerfiles...

        DT1001 dockerpycreds.errors.InitializationError: docker-credential-gcloud 未安装或在 PATH 中不可用

        1. 选项 1:编辑 docker 配置文件并从那里删除所有 gcloud 条目。

          • Windows c:/Users/<your account>/.docker/config.json

          • Linux 和 MacOS ~/.docker/config.json

        2. 选项 2:转到疑难解答 -> 重置为出厂默认设置。

        在此之后,我的 docker compose 正在创建容器并运行图像而没有任何问题。

        【讨论】:

        • 我不得不将 credHelpers 设为空 "credHelpers":{}。谢谢为我工作。
        • 我还清除了@amir-chatrbahr 提到的"credHelpers":{},但它又被填满了。我认为它可能来自更新 Docker Desktop 或 IntelliJ(我有一个未配置的 GCloud 插件)?
        • 我在本地尝试 docker-compose build 时遇到了同样的问题,卸载 gcloud 后,删除两个文件后它工作正常:/usr/bin/docker-credential-gcloud~/.docker/config.json
        【解决方案8】:

        在我的情况下,问题是由于 WSL 1 如何与 Windows 上的 Docker 一起工作。起初我只在 WSL Ubuntu 中安装和初始化 gcloud,而不是在 Windows 中。但是,由于 Docker 守护程序实际上是由 Windows 运行的,因此您还需要为 Windows 安装 gcloud(并且不要忘记在那里运行所有的初始化和授权)。

        【讨论】:

          【解决方案9】:

          通常,此错误表明您的 $PATH 变量已被您最近安装的程序包或程序破坏,因此无法找到 Google Cloud SDK。

          $PATH 被许多程序在安装时通过更改 ~/.profile~/.bash_profile~/.bashrc 或它们的非 bash 等效项来更改。如果$PATH 错误,Google Cloud SDK 会在docker 中配置,但不能被视为可执行文件,因此我们会收到此错误。这假设您过去使用过 Google Cloud SDK,但如果您的 docker 配置了 gcloud,那么您可能已经使用过。不要重新安装 gcloud 或禁用它,你的系统上已经安装了它,这很好。

          那么解决方案是修复你的 $PATH不要安装任何东西。

          echo $PATH
          

          这应该是一个很长的: 分隔目录列表,其中包含您的文件所在的目录。您在字符串中看到google-cloud-sdk/bin 吗?考虑到您在这台计算机上遇到的所有麻烦,字符串是否太短了?您使用 NVM 但它不见了?使用 Homebrew 但它不见了?从命令行尝试brew,是否有效?

          如果对上述任何一项的回答为“否”,请检查上述文件以查看每个文件底部是否有任何新条目可能已损坏。你刚刚安装了什么新东西吗?

          有些东西正在破坏您的$PATH,您需要弄清楚那是什么。对我来说,它通常通过conda init 命令与 Anaconda Python 有关。对你来说,它可能是nvm 或其他东西。弄清楚它是什么并解决问题。不要从一个新的$PATH 重新开始并重新安装相同的东西或禁用gcloud 身份验证。

          【讨论】:

            【解决方案10】:

            在 MacOS 上

            第一步:

            安装 gcloud 和 docker-credential-gcr, 关注这个 tutorial

            第 2 步:

            $ ln -s /usr/local/google-cloud-sdk/bin/docker-credential-gcr /usr/local/bin/docker-credential-gcloud

            第三步:

            $ rm -rf ~/.docker

            第四步:

            $ docker-compose build --pull

            完成!

            【讨论】:

              【解决方案11】:

              我不知道 Google 想要在这里实现什么。在 Linux 上有 docker-credential-gcloud,在 Windows 上有 docker-credential-gcr.exe,然后是 docker-credential-gcloud.cmd,它调用 gcloud auth docker-helper。如果您正在尝试编写可移植的构建脚本或 gradle 规则,这简直是一场噩梦,因为当您执行 docker-credential-gcloud 时,并非所有东西似乎都能找到并调用 docker-credential-gcloud.cmd ......它可能适用于dos 提示符,但一般不起作用。

              在大量使用 .bat 脚本、cygwin 脚本、.cmd 脚本等之后,我发现最好的解决方案是进入 gcloud 安装并复制 docker-credential-gcr.exe docker-credential- gcloud.exe ...不是一个非常令人满意的解决方案,但这是我发现的唯一可以解决问题的方法。

              【讨论】:

                猜你喜欢
                • 2019-12-17
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2019-02-27
                • 2020-11-05
                • 2013-08-09
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多