docker-credential-desktop 未安装或在 PATH 中不可用

Vin*_*nzo 96 homebrew docker docker-compose docker-machine

我的 Mac 上的 Docker 安装可能有点混乱。起初我安装了 Docker 桌面,但运行它后我了解到,由于我使用的是较旧的 Mac,所以我必须安装 VirtualBox,所以我按照以下步骤操作:

  1. /usr/local/bin允许用户在文件夹上写入

    sudo chown -R $(whoami) /usr/local/bin

  2. 安装 Docker-Machine

base=https://github.com/docker/machine/releases/download/v0.16.0 &&
  curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/usr/local/bin/docker-machine &&
  chmod +x /usr/local/bin/docker-machine
Run Code Online (Sandbox Code Playgroud)
  1. 从开发帐户手动安装 Xcode CLI

  2. 安装自制啤酒

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Run Code Online (Sandbox Code Playgroud)
  1. 安装 Docker + wget (使用 Brew)

    brew install docker

    brew install wget

  2. 安装 bash 补全脚本

base=https://raw.githubusercontent.com/docker/machine/v0.16.0
for i in docker-machine-prompt.bash docker-machine-wrapper.bash docker-machine.bash
do
    sudo wget "$base/contrib/completion/bash/${i}" -P /etc/bash_completion.d
done
Run Code Online (Sandbox Code Playgroud)
  1. 启用 docker-machine shell 提示符

    echo 'PS1='[\u@\h \W$(__docker_machine_ps1)]\$ '' >> ~/.bashrc

  2. 安装 VirtualBox、ExtensionPack 和 SDK:https://www.virtualbox.org/wiki/Downloads

我现在使用 home-brew 安装了 docker-compose (docker-compose 版本 1.29.2,版本未知),但在运行时docker-compose up出现以下错误:

docker.credentials.errors.InitializationError: docker-credential-desktop not installed or not available in PATH

which docker打印 /usr/local/bin/docker。

Brew 安装位于/usr/local/Cellar/docker/20.10.6/usr/local/Cellar/docker-compose/1.29.2。正如我所看到的,还有一个用于 docker-machine 的 home-brew,我应该通过 home-brew 安装 docker-machine 吗?

我可以检查什么来确保我使用 home-brew 中的 docker 安装并擦除/更正按照上述步骤进行的安装?

小智 275

检查您的~/.docker/config.json并将“credsStore”替换为“credStore”

{
  "stackOrchestrator" : "swarm",
  "experimental" : "disabled",
  "credStore" : "desktop"
}

Run Code Online (Sandbox Code Playgroud)

  • 请注意,“credStore”不是有效的配置键(如果我错了,请纠正我),因此将“credsStore”更改为“credStore”有效的唯一原因是因为您实际上正在删除“credStore”条目。IMO 最好删除它,或者将其重命名为明显占位符的名称,这样在将来检查配置时就不会产生误导。 (24认同)
  • `~/.docker/config.json` 准确地说,这是一个文件路径 (11认同)
  • 对于 [Colima](https://github.com/abiosoft/colima) 上的用户,您可以将 `credStore` 的值设置为 `colima`。 (7认同)
  • 2022 年 8 月。我在 Mac Monterey 上运行 docker Engine 20.10.17,使用 colima 0.4.4,没有 docker 桌面。将 `"credsStore": "desktop"` 更改为 `"credStore": "desktop" 帮助我解决了 docker 登录的以下问题: ``` 保存凭据时出错:存储凭据时出错 - err: exec: "docker-credential-desktop ": 在 $PATH 中找不到可执行文件,out: `````` (4认同)
  • 这个解决方案在 macOS Catalina 上对我来说效果很好。 (3认同)

Iva*_*van 88

只需~/.docker/config.json更改credsStorecredStore

  • 请注意,据我所知,这个解决方案具有误导性:它之所以有效,是因为“credStore”不是有效的密钥,并且被 Docker 忽略。它相当于删除 `"credsStore": "desktop"`,我认为这更好,因为如果您将来调试配置以确定 Docker 不解析凭证的原因,很容易错过拼写错误。 (13认同)
  • 伊万,如果你检查我自己的答案(已接受的答案),你会发现它也适用于 credsStore .. 问题是值 ..nit 关键 (2认同)

Jac*_*wes 40

由于您使用的是 Mac,docker-credential-osxkeychain因此您可以使用它。

  1. 安装docker-credential-helper

    brew install docker-credential-helper
    
    Run Code Online (Sandbox Code Playgroud)
  2. 验证docker-credential-osxkeychain可用。

    $ docker-credential-osxkeychain version
    0.6.4
    
    Run Code Online (Sandbox Code Playgroud)
  3. 设置credsStoreosxkeychain~/.docker/config.json

    {
      "auths": {
        "https://index.docker.io/v1/": {}
      },
      "credsStore": "osxkeychain",
      "experimental": "enabled",
      "stackOrchestrator": "swarm"
    }
    
    Run Code Online (Sandbox Code Playgroud)
  4. 登录 Docker Hub。

    $ docker login -u $USER
    Password: 
    Login Succeeded
    
    Run Code Online (Sandbox Code Playgroud)

  • 这是迄今为止正确且最安全的答案。在上面,所有答案都绕过动态凭证。使用 docker-credential-osxkeychain 的二进制文件可确保 docker 登录的凭据不以明文格式存储。 (6认同)

Vin*_*nzo 26

经过长时间的谷歌搜索,我发现问题出在该config.json文件上。"credsStore" : "docker-credential-desktop"错误的是:

{
  "credsStore" : "docker-credential-desktop",
  "stackOrchestrator" : "swarm",
  "experimental" : "disabled"
} 
Run Code Online (Sandbox Code Playgroud)

"credsStore"键值更改为 ,"desktop"并且 compose 现在可以按预期工作。有些人指出credsDstore拼写错误是问题所在,并用 修复了它credDstore,但在我的例子中,值是问题,它适用于"credsStore" : "desktop""credStore" : "desktop"

希望它能帮助其他开始使用 Docker 的人。干杯。

  • `"credsStore: "desktop"` 是全新安装 Docker 的默认值,版本为 `Docker version 20.10.16, build aa7e414`。 @Ivan 将 `credsStore` (复数)更改为 `credStore` (单数)的答案是确实为我解决了这个问题。 (3认同)