`docker-credential-gcloud` 不在系统路径中
`docker-credential-gcloud` not in system PATH
在对 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
returns docker-credential-gcloud not found
.
我没有其他与 gcloud 相关的路径问题,而且我这辈子都不知道如何 install/add 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
我还在 运行 source /usr/local/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/path.zsh.inc
上安装了原始 gcloud。
从未找到直接解决 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
- 完全重启终端。
这似乎真的与 Homebrew Cask 有关。我卸载了木桶,然后手动重新安装了 Google Cloud SDK downloading the tar ball 和 运行 那里描述的打包安装脚本。
现在 docker-credential-gcloud
在我的路上:
$ which docker-credential-gcloud
/Users/moritz/google-cloud-sdk/bin/docker-credential-gcloud
注意:以下所有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
应该会成功。
当我尝试通过 SSH 从 Google Cloud Build 进入引擎 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
新版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
...
所以我遇到了同样的问题,我试图将图像从 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
安装的,并安装了特定发行版软件包管理器,对我来说 [=16] =] 按照 Installing Google Cloud SDK: Installation options 页面中的说明重新 运行 gcloud auth configure-docker
,这次它解决了我的问题。
刚刚在 Windows、运行 Docker 和 Linux 容器、Docker 引擎 v19.03.8 上遇到了同样的问题。使用 docker 撰写。我的 docker 文件没有使用 gcloud...
DT1001 dockerpycreds.errors.InitializationError:
docker-credential-gcloud not installed or not available in PATH
选项 1:编辑 docker 配置文件并从中删除所有 gcloud
条目。
Windows c:/Users/<your account>/.docker/config.json
Linux & MacOS ~/.docker/config.json
选项 2:转到故障排除 -> 重置为出厂默认设置。
在此之后,我的 docker compose 正在创建容器和 运行 图像,没有任何问题。
在我的例子中,问题是由于 WSL 1 在 Windows 上如何与 Docker 一起工作。一开始我只在WSLUbuntu里安装初始化了gcloud
,在Windows里没有。然而,由于 Docker 守护进程实际上是由 Windows 运行,您还需要为 Windows 安装 gcloud
(并且不要忘记 运行 那里的所有初始化和授权)。
通常,此错误表示您的 $PATH
变量已被您最近安装的软件包或程序破坏,因此无法找到 Google Cloud SDK。
$PATH
在许多程序通过更改 ~/.profile
、~/.bash_profile
或 ~/.bashrc
或它们的 non-bash 等价物安装时被更改。由于 $PATH
错误,Google Cloud SDK 在 docker
中配置但不能被视为可执行文件,因此我们收到此错误。这假设您过去使用过 Google Cloud SDK,但如果 gcloud
配置了您的 docker 那么您可能已经使用过。不要重新安装 gcloud 或禁用它,您的系统上已经安装了它,这很好。
然后解决方法是修复你的 $PATH
,不要安装任何东西。
echo $PATH
这应该是一个很长的 :
分隔目录列表,您的文件所在的目录。您在字符串中看到 google-cloud-sdk/bin
了吗?考虑到您在这台计算机上遇到的所有麻烦,字符串是否太短了?您使用 NVM 但它丢失了?使用 Homebrew 但它不见了?从命令行尝试 brew
,是否有效?
如果以上任何一项的答案为“否”,请检查上面的文件,看看每个文件的底部是否有任何可能损坏的新条目。你刚刚安装了什么新东西吗?
有东西在破坏您的 $PATH
,您需要弄清楚那是什么。对我来说,这通常与 Anaconda Python 通过 conda init
命令有关。对您而言,它可能是 nvm
或其他。弄清楚它是什么并解决问题。不要使用新的 $PATH
重新开始并重新安装相同的东西或禁用 [=18=] 身份验证。
在 MacOS 上
第一步:
安装 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
完成!
我不明白 Google 在这里试图达到什么目的。在 Linux 上有 docker-credential-gcloud,在 Windows 上有 docker-credential-gcr.exe,然后是 docker- credential-gcloud.cmd 调用 gcloud auth docker-helper。如果您正在尝试编写可移植的构建脚本或 gradle 规则,这将是一场噩梦,因为当您执行 docker-credential-gcloud...它可能在 dos 提示符下工作,但通常不起作用。
在大量使用 .bat 脚本、cygwin 脚本、.cmd 脚本等之后,我发现最好的解决方案是进入 gcloud 安装并复制 docker-credential-gcr.exe docker-credential-gcloud.exe ...不是一个非常令人满意的解决方案,但这是我发现的唯一可以解决问题的方法。
在 Windows 10 月 11 日,您需要确保 C:\Users\USERNAME\AppData\Local\Google\Cloud SDK\google-cloud-sdk\bin\
已 添加到您的系统 $PATH
环境变量 。如果 Google Cloud SDK 在 GCloud 安装期间无法添加,则可能未添加。所以像这样手动添加它:
- Windows 任务栏 ➔ 按搜索图标或搜索栏
- 键入
"environment"
➔ 并单击 "Edit the System Environment Variables"
(确保您具有管理员访问权限)
- 在对话框的底部,单击 环境变量... 按钮
System Variables
➔ 单击Path
➔ 编辑... ➔ 新建 ➔ 粘贴C:\Users\USERNAME\AppData\Local\Google\Cloud SDK\google-cloud-sdk\bin\
(将“USERNAME”替换为您的用户名)
- 关闭并重新启动任何打开的命令提示符 windows。
然后在Git Bash for Windows控制台上验证:
- 可选:请注意
AppData
文件夹默认隐藏,因此您可能需要先 unhide AppData 查看其内容。
- 重新启动 Git Bash 终端 window
echo $PATH
➔ 这应该打印一个长字符串,其中包含::/c/Users/USERNAME/AppData/Local/Google/Cloud SDK/google-cloud-sdk/bin
where docker-credential-gcloud
➔ 这应该打印 C:\Users\USERNAME\AppData\Local\Google\Cloud SDK\google-cloud-sdk\bin\docker-credential-gcloud.cmd
在对 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
returns docker-credential-gcloud not found
.
我没有其他与 gcloud 相关的路径问题,而且我这辈子都不知道如何 install/add 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
我还在 运行 source /usr/local/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/path.zsh.inc
上安装了原始 gcloud。
从未找到直接解决 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
- 完全重启终端。
这似乎真的与 Homebrew Cask 有关。我卸载了木桶,然后手动重新安装了 Google Cloud SDK downloading the tar ball 和 运行 那里描述的打包安装脚本。
现在 docker-credential-gcloud
在我的路上:
$ which docker-credential-gcloud
/Users/moritz/google-cloud-sdk/bin/docker-credential-gcloud
注意:以下所有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
应该会成功。
当我尝试通过 SSH 从 Google Cloud Build 进入引擎 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
新版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
...
所以我遇到了同样的问题,我试图将图像从 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
安装的,并安装了特定发行版软件包管理器,对我来说 [=16] =] 按照 Installing Google Cloud SDK: Installation options 页面中的说明重新 运行 gcloud auth configure-docker
,这次它解决了我的问题。
刚刚在 Windows、运行 Docker 和 Linux 容器、Docker 引擎 v19.03.8 上遇到了同样的问题。使用 docker 撰写。我的 docker 文件没有使用 gcloud...
DT1001 dockerpycreds.errors.InitializationError: docker-credential-gcloud not installed or not available in PATH
选项 1:编辑 docker 配置文件并从中删除所有
gcloud
条目。Windows
c:/Users/<your account>/.docker/config.json
Linux & MacOS
~/.docker/config.json
选项 2:转到故障排除 -> 重置为出厂默认设置。
在此之后,我的 docker compose 正在创建容器和 运行 图像,没有任何问题。
在我的例子中,问题是由于 WSL 1 在 Windows 上如何与 Docker 一起工作。一开始我只在WSLUbuntu里安装初始化了gcloud
,在Windows里没有。然而,由于 Docker 守护进程实际上是由 Windows 运行,您还需要为 Windows 安装 gcloud
(并且不要忘记 运行 那里的所有初始化和授权)。
通常,此错误表示您的 $PATH
变量已被您最近安装的软件包或程序破坏,因此无法找到 Google Cloud SDK。
$PATH
在许多程序通过更改 ~/.profile
、~/.bash_profile
或 ~/.bashrc
或它们的 non-bash 等价物安装时被更改。由于 $PATH
错误,Google Cloud SDK 在 docker
中配置但不能被视为可执行文件,因此我们收到此错误。这假设您过去使用过 Google Cloud SDK,但如果 gcloud
配置了您的 docker 那么您可能已经使用过。不要重新安装 gcloud 或禁用它,您的系统上已经安装了它,这很好。
然后解决方法是修复你的 $PATH
,不要安装任何东西。
echo $PATH
这应该是一个很长的 :
分隔目录列表,您的文件所在的目录。您在字符串中看到 google-cloud-sdk/bin
了吗?考虑到您在这台计算机上遇到的所有麻烦,字符串是否太短了?您使用 NVM 但它丢失了?使用 Homebrew 但它不见了?从命令行尝试 brew
,是否有效?
如果以上任何一项的答案为“否”,请检查上面的文件,看看每个文件的底部是否有任何可能损坏的新条目。你刚刚安装了什么新东西吗?
有东西在破坏您的 $PATH
,您需要弄清楚那是什么。对我来说,这通常与 Anaconda Python 通过 conda init
命令有关。对您而言,它可能是 nvm
或其他。弄清楚它是什么并解决问题。不要使用新的 $PATH
重新开始并重新安装相同的东西或禁用 [=18=] 身份验证。
在 MacOS 上
第一步:
安装 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
完成!
我不明白 Google 在这里试图达到什么目的。在 Linux 上有 docker-credential-gcloud,在 Windows 上有 docker-credential-gcr.exe,然后是 docker- credential-gcloud.cmd 调用 gcloud auth docker-helper。如果您正在尝试编写可移植的构建脚本或 gradle 规则,这将是一场噩梦,因为当您执行 docker-credential-gcloud...它可能在 dos 提示符下工作,但通常不起作用。
在大量使用 .bat 脚本、cygwin 脚本、.cmd 脚本等之后,我发现最好的解决方案是进入 gcloud 安装并复制 docker-credential-gcr.exe docker-credential-gcloud.exe ...不是一个非常令人满意的解决方案,但这是我发现的唯一可以解决问题的方法。
在 Windows 10 月 11 日,您需要确保 C:\Users\USERNAME\AppData\Local\Google\Cloud SDK\google-cloud-sdk\bin\
已 添加到您的系统 $PATH
环境变量 。如果 Google Cloud SDK 在 GCloud 安装期间无法添加,则可能未添加。所以像这样手动添加它:
- Windows 任务栏 ➔ 按搜索图标或搜索栏
- 键入
"environment"
➔ 并单击"Edit the System Environment Variables"
(确保您具有管理员访问权限) - 在对话框的底部,单击 环境变量... 按钮
System Variables
➔ 单击Path
➔ 编辑... ➔ 新建 ➔ 粘贴C:\Users\USERNAME\AppData\Local\Google\Cloud SDK\google-cloud-sdk\bin\
(将“USERNAME”替换为您的用户名)- 关闭并重新启动任何打开的命令提示符 windows。
然后在Git Bash for Windows控制台上验证:
- 可选:请注意
AppData
文件夹默认隐藏,因此您可能需要先 unhide AppData 查看其内容。 - 重新启动 Git Bash 终端 window
echo $PATH
➔ 这应该打印一个长字符串,其中包含::/c/Users/USERNAME/AppData/Local/Google/Cloud SDK/google-cloud-sdk/bin
where docker-credential-gcloud
➔ 这应该打印C:\Users\USERNAME\AppData\Local\Google\Cloud SDK\google-cloud-sdk\bin\docker-credential-gcloud.cmd