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

问题描述 投票:0回答:7

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

  1. 允许用户在

    /usr/local/bin
    文件夹上写入

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

  2. 安装 Docker 机器

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
  1. 从开发帐户手动安装 Xcode CLI

  2. 安装 Home Brew

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
  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
  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 安装并擦除/更正按照上述步骤进行的安装?

docker docker-compose homebrew docker-machine
7个回答
213
投票

检查您的

~/.docker/config.json
并将“credsStore”替换为“credStore”

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


77
投票

只需在 ~/.docker/config.json 中将 credsStore 更改为 credStore


30
投票

由于您使用的是 Mac,因此可以使用

docker-credential-osxkeychain
来代替。

  1. 安装

    docker-credential-helper

    brew install docker-credential-helper
    
  2. 验证

    docker-credential-osxkeychain
    可用。

    $ docker-credential-osxkeychain version
    0.6.4
    
  3. credsStore
    设置为
    osxkeychain
     中的 
    ~/.docker/config.json

    {
      "auths": {
        "https://index.docker.io/v1/": {}
      },
      "credsStore": "osxkeychain",
      "experimental": "enabled",
      "stackOrchestrator": "swarm"
    }
    
  4. 登录 Docker Hub。

    $ docker login -u $USER
    Password: 
    Login Succeeded
    

24
投票

经过长时间的谷歌搜索,我发现问题出在

config.json
文件上。
"credsStore" : "docker-credential-desktop"
是错误的:

{
  "credsStore" : "docker-credential-desktop",
  "stackOrchestrator" : "swarm",
  "experimental" : "disabled"
} 

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

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


2
投票

我在尝试本地调用 aws lambda 函数时在 Windows 10 上使用 wsl2 遇到了类似的问题。跑步时我得到了

docker.credentials.errors.InitializationError: docker-credential-desktop not installed or not available in PATH
sam build --use-container
。运行
which docker-credential-desktop
没有结果

进一步检查后,我发现

docker-credential-desktop.exe
PATH
中。经过快速谷歌之后,似乎在 Docker Desktop 中为 Windows 10 符号链接
wsl/docker-desktop/cli-tools/usr/bin/docker-credentials-desktop.exe
/usr/bin/docker-credential-desktop.exe
启用了 wsl2 后端。为了解决这个问题,我只是删除了符号链接并创建了一个没有
.exe

的新符号链接

要检查链接并将其删除:

user@device:~$ ls -l /usr/bin/docker-credential-desktop.exe
lrwxrwxrwx 1 root root 67 Jan  5 23:15 /usr/bin/docker-credential-desktop.exe -> /wsl/docker-desktop/cli-tools/usr/bin/docker-credential-desktop.exe
user@device:~$ sudo rm /usr/bin/docker-credential-desktop.exe

要创建一个不带

.exe
的新项目并检查其是否有效:

user@device:~$ sudo ln -s /wsl/docker-desktop/cli-tools/usr/bin/docker-credential-desktop.exe /usr/bin/docker-credential-desktop
user@device:~$ ls -l /usr/bin/docker-credential-desktop
lrwxrwxrwx 1 root root 67 Jan 12 14:22 /usr/bin/docker-credential-desktop -> /wsl/docker-desktop/cli-tools/usr/bin/docker-credential-desktop.exe

之后我采购

.bashrc
来更新
PATH
,问题就解决了。我用
which docker-credential-desktop
验证了这一点,它现在显示了上面符号链接中指定的位置。


1
投票

如果您使用 WSL,请尝试使用

desktop.exe
,而不是
desktop
。因为你会发现
/usr/bin/
中的程序是
docker-credential-desktop.exe

{
   "credsStore": "desktop.exe"
}

0
投票

正如其他地方提到的,将

credsStore
重命名为
credStore
只是将其设置为无效值并禁用授权。

我假设我的问题是因为我安装了

docker-ce
而不是
docker-desktop
。我找到的解决方案是从他们的存储库构建一个凭证助手。

我在 Ubuntu 下运行无根安装,但某些命令需要 root 访问权限,所以我最终运行:

  • sudo systemctl start docker
  • sudo docker run --privileged --rm tonistiigi/binfmt --install all
  • sudo docker buildx create --use
  • git clone https://github.com/docker/docker-credential-helpers.git
  • cd docker-credential-helpers/
  • make secretservice
    # secretservice uses the dbus secrets manager
  • cp bin/build/docker-credential-secretservice ~/bin
    # ~/bin is on my $PATH
  • cd ~/.docker/
  • sed -e 's/"credsStore": "desktop"/"credsStore": "secretservice"/' config.json > config.json.new
  • mv config.json.new config.json
© www.soinside.com 2019 - 2024. All rights reserved.