我的 Mac 上的 Docker 安装可能有点混乱。 起初我安装了 Docker 桌面,但运行它后我发现,由于我使用的是较旧的 Mac,所以我必须安装 VirtualBox,所以我按照以下步骤操作:
允许用户在
/usr/local/bin
文件夹上写入
sudo chown -R $(whoami) /usr/local/bin
安装 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
从开发帐户手动安装 Xcode CLI
安装 Home Brew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
安装 Docker + wget(使用 Brew)
brew install docker
brew install wget
安装 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
启用 docker-machine shell 提示符
echo 'PS1='[\u@\h \W$(__docker_machine_ps1)]\$ '' >> ~/.bashrc
安装 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/config.json
并将“credsStore”替换为“credStore”
{
"stackOrchestrator" : "swarm",
"experimental" : "disabled",
"credStore" : "desktop"
}
只需在 ~/.docker/config.json 中将 credsStore 更改为 credStore
由于您使用的是 Mac,因此可以使用
docker-credential-osxkeychain
来代替。
安装
docker-credential-helper
。
brew install docker-credential-helper
验证
docker-credential-osxkeychain
可用。
$ docker-credential-osxkeychain version
0.6.4
将
credsStore
设置为 osxkeychain
中的
~/.docker/config.json
{
"auths": {
"https://index.docker.io/v1/": {}
},
"credsStore": "osxkeychain",
"experimental": "enabled",
"stackOrchestrator": "swarm"
}
登录 Docker Hub。
$ docker login -u $USER
Password:
Login Succeeded
经过长时间的谷歌搜索,我发现问题出在
config.json
文件上。
"credsStore" : "docker-credential-desktop"
是错误的:
{
"credsStore" : "docker-credential-desktop",
"stackOrchestrator" : "swarm",
"experimental" : "disabled"
}
将
"credsStore"
键值更改为 "desktop"
,并且 compose 现在可以按预期工作。有些人指出 credsDstore
错字是问题所在,并用 credDstore
修复了它,但在我的例子中,值是问题,它适用于 "credsStore" : "desktop"
和 "credStore" : "desktop"
。
希望它能帮助其他人开始使用 Docker。 干杯。
我在尝试本地调用 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
验证了这一点,它现在显示了上面符号链接中指定的位置。
如果您使用 WSL,请尝试使用
desktop.exe
,而不是 desktop
。因为你会发现/usr/bin/
中的程序是docker-credential-desktop.exe
。
{
"credsStore": "desktop.exe"
}
正如其他地方提到的,将
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