`docker-credential-gcloud`不在系统路径中

时间:2018-04-11 16:28:43

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

在对gcloud和docker进行最新更新后,我无法访问google容器存储库中的图片。当我在更新gcloud后根据说明运行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 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

10 个答案:

答案 0 :(得分:34)

注意:以下所有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符号链接。当你在第一个地方安装gcloud时,这个符号链接是由Homebrew创建的。现在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

它应该成功。

答案 1 :(得分:16)

在Windows上也遇到了相同的问题,该Docker在Linux容器和Docker引擎v19.03.8上运行Docker。使用docker compose我没有将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正在创建容器并运行图像而没有任何问题。

答案 2 :(得分:2)

从未找到直接解决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 :(得分:1)

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

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

然后解决方案是修复您的 $PATH,而不安装任何东西。

echo $PATH

这应该是一个很长的:分隔文件目录列表。您在字符串中看到google-cloud-sdk/bin吗?考虑到您在这台计算机上生活中遇到的所有麻烦,字符串方式是否太短?您使用NVM,但缺少它吗?使用自制软件,但它丢失了吗?从命令行尝试brew,行得通吗?

如果以上任何一个答案为“否”,请检查上面的文件,以查看每个文件的底部是否有任何新条目可能已损坏的内容。您刚刚安装了新东西吗?

某事正在破坏您的$PATH,您需要弄清楚那是什么。对我来说,通常是通过conda init命令来使用Anaconda Python。对您来说,它可能是nvm或其他名称。找出问题所在并解决问题。不要重新使用新的$PATH并重新安装相同的内容或禁用gcloud身份验证。

答案 4 :(得分:0)

它似乎与Homebrew Cask有关。我卸载了这个桶,然后手动重新安装了Google Cloud SDK downloading the tar ball并运行了那里描述的打包安装脚本。

现在RemoveCallback在我的路上:

docker-credential-gcloud

答案 5 :(得分:0)

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

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

答案 6 :(得分:0)

新版的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
...

答案 7 :(得分:0)

因此,当我尝试将映像从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,这次它解决了我的问题。

答案 8 :(得分:0)

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

答案 9 :(得分:0)

在MacOS上

步骤1:

安装gcloud和docker-credential-gcr, 遵循此 tutorial

步骤2:

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

步骤3:

$ rm -rf ~/.docker

步骤4:

$ docker-compose build --pull

完成!