在gcloud和docker的最新更新之后,我无法访问我的谷歌容器存储库中的图像。 本地运行时: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
。
注意:以下所有docker-credential-gcr
都可以替换为docker-credential-gcloud
。我认为这只是gcloud的不同版本,我可能是错的。
我也使用自制酒桶来安装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
它应该成功。
刚刚在Windows上遇到了同样的问题,使用Linux容器运行Docker,Docker引擎v19.03.8。使用 docker comose。我不使用 gcloud 为我的码头文件...
DT1001 dockerpycreds.errors.InitializationError: docker-credential-gcloud 未安装或在 PATH 中不可用
-
选项 1:编辑 docker 配置文件并从中删除所有
gcloud
条目。-
视窗
c:/Users/<your account>/.docker/config.json
-
Linux 和 MacOS
~/.docker/config.json
-
-
选项 2:转到故障排除 ->重置为出厂默认设置。
在此之后,我的 docker 组合正在创建容器并运行映像,没有任何问题。
在 MacOS 上
第 1 步:
安装 gcloud 和 docker-credential-gcr, 遵循本教程
第 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
完成!
从未找到直接解决docker-credential-gcloud
问题的方法,但以下内容让我再次启动并运行。警告:以下内容将删除所有现有的 docker 映像并安装一堆 gcloud 实用程序:
gcloud components install docker-credential-gcr
,- 完全重新启动终端
docker-credential-gcr configure-docker
.-
screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty
-
umount /var/lib/docker/overlay2
rm -rf /var/lib/docker
- 完全重新启动终端。
新版本的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
...
通常,此错误表示您的$PATH
变量已被您最近安装的软件包或程序破坏,因此找不到 Google Cloud SDK。
许多程序在安装时会更改$PATH
~/.profile
、~/.bash_profile
或~/.bashrc
或其非 bash 等效项。如果$PATH
不好,Google Cloud SDK在docker
中配置,但不能被视为可执行文件,因此我们收到此错误。这假设您过去使用过 Google Cloud SDK,但如果gcloud
配置了您的 docker,那么您可能已经使用了。不要重新安装gcloud或禁用它,您的系统上已经有它,这很好。
然后的解决方案是 修复你的$PATH
,而不是安装任何东西。
echo $PATH
这应该是一个很长的:
分隔的文件目录列表。您是否在字符串中看到google-cloud-sdk/bin
?考虑到您在这台计算机上遇到的所有麻烦,字符串是否太短了?您使用 NVM 但它丢失了?使用自制软件,但它不见了?尝试从命令行brew
,它有效吗?
如果对上述任何一项的答案为"否",请检查上面的文件,看看每个文件的底部是否有任何可能破坏内容的新条目。你刚刚安装了什么新东西吗?
有些东西正在破坏你的$PATH
,你需要弄清楚那是什么。对我来说,这通常与通过conda init
命令的Anaconda Python有关。对你来说,这可能是nvm
或其他东西。弄清楚它是什么并解决问题。不要从新$PATH
重新开始并重新安装相同的内容或禁用gcloud
身份验证。
这似乎真的与自制酒桶有关。我卸载了木桶,然后通过手动下载焦油球并运行打包的安装脚本重新安装了 Google Cloud SDK,如此处所述。
现在docker-credential-gcloud
挡在我的路上:
$ which docker-credential-gcloud
/Users/moritz/google-cloud-sdk/bin/docker-credential-gcloud
我无法弄清楚谷歌在这里想要实现什么。在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...这不是一个非常令人满意的解决方案,但这是我发现唯一可以解决问题的方法。
当我尝试从 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
所以我刚刚遇到了同样的问题,我试图将图像从 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
安装的,并与特定于发行版的软件包管理器一起安装,对我来说,按照安装 Google Cloud SDK:安装选项页面中的说明apt-get
并重新运行gcloud auth configure-docker
,这次它解决了我的问题。
就我而言,问题是由于WSL 1如何与Windows上的Docker一起工作。起初,我只在WSL Ubuntu中安装和初始化gcloud
,而不是在Windows中。但是,由于Docker守护进程实际上是由Windows运行的,因此您还需要为Windows安装gcloud
(并且不要忘记在那里运行所有初始化和授权)。
在 Windows 10/11 上,您需要确保将C:UsersUSERNAMEAppDataLocalGoogleCloud SDKgoogle-cloud-sdkbin
添加到系统$PATH
环境变量中。如果 Google Cloud SDK 在 GCloud 安装期间无法添加它,则可能尚未添加它。因此,请像这样手动添加它:
- 窗口任务栏 ➔ 按搜索图标🔍或搜索栏
- 键入
"environment"
➔ 并单击"Edit the System Environment Variables"
(确保您具有管理员访问权限) - 在对话框底部,单击环境变量...按钮
System Variables
➔ 点击Path
➔编辑...➔新建➔ 粘贴C:UsersUSERNAMEAppDataLocalGoogleCloud SDKgoogle-cloud-sdkbin
(将"用户名"替换为您的用户名)- 关闭并重新启动任何打开的命令提示符窗口。
然后在 Git Bash for Windows 控制台上验证:
- 可选:请注意,默认情况下
AppData
文件夹处于隐藏状态,因此您可能需要先取消隐藏 AppData,以查看其内容。 - 重新启动 Git Bash 终端窗口
echo $PATH
➔ 这应该打印一个包含以下内容的长字符串::/c/Users/USERNAME/AppData/Local/Google/Cloud SDK/google-cloud-sdk/bin
where docker-credential-gcloud
➔ 这应该打印C:UsersUSERNAMEAppDataLocalGoogleCloud SDKgoogle-cloud-sdkbindocker-credential-gcloud.cmd