Apple Silicon Mac执行docker login时凭证保存错误问题咨询
故障场景
- 运行环境:搭载Apple Silicon芯片的MacBook Pro,macOS Monterey 12.0.1
- 触发操作:执行
sudo docker login ncvr.io尝试连接NGC服务 - 完整报错信息:
Error saving credentials: error storing credentials - err: exit status 1, out: `Post "http://ipc/registry/credstore-updated": dial unix /var/root/Library/Containers/com.docker.docker/Data/backend.sock: connect: no such file or directory`
故障根因
该报错和芯片架构、系统版本无直接关联,核心原因是权限上下文不匹配:Docker Desktop for Mac默认以当前登录的普通用户权限运行,负责凭证存储、后端通信的socket文件存放在当前普通用户的个人目录下;加sudo执行docker命令时,系统会切换到root用户身份运行,会默认去root用户的个人目录路径下查找对应socket文件,该路径不存在目标文件就会触发连接失败。
解决步骤
按优先级从高到低尝试以下方案:
- 优先去掉sudo直接执行登录命令
Docker Desktop for Mac默认不需要root权限即可执行所有docker操作,直接在当前普通用户的终端窗口运行:docker login ncvr.io
按提示输入NGC账号、对应访问凭证即可,凭证会自动存入当前用户的系统钥匙串,不会触发socket找不到的问题。 - 若去掉sudo后提示docker命令不存在/无执行权限
先确认Docker Desktop完全启动:查看屏幕顶部菜单栏的Docker鲸鱼图标,确认图标没有显示加载中的"starting"状态,完全启动后重试命令。
如果仍提示权限不足,依次执行以下命令创建docker用户组并将当前用户加入组内:
执行完成后关闭当前终端,重新打开终端窗口再运行不带sudo的登录命令即可。sudo dscl . create /Groups/docker sudo dscl . create /Groups/docker PrimaryGroupID 1000 sudo dscl . append /Groups/docker GroupMembership $USER - 特殊场景必须使用root权限执行docker操作
若业务要求必须通过root身份执行docker命令,先将当前用户的Docker上下文同步到root用户目录,操作如下:- 普通用户身份下执行
docker context ls,确认当前默认使用的是desktop-linux上下文 - 依次执行以下命令创建root用户的docker配置目录、同步配置、创建socket软链接:
注意该软链接在Docker Desktop每次重启后会失效,非必要不推荐使用该方案。sudo mkdir -p /var/root/.docker sudo cp ~/.docker/config.json /var/root/.docker/ sudo mkdir -p /var/root/Library/Containers/com.docker.docker/Data/ sudo ln -s ~/Library/Containers/com.docker.docker/Data/backend.sock /var/root/Library/Containers/com.docker.docker/Data/backend.sock - 普通用户身份下执行
- 兜底排查
若以上方案操作后仍报错,打开Docker Desktop设置页,找到Features in Development分类,确认Use the new Virtualization framework选项已勾选,Monterey系统可同时勾选Enable VirtioFS accelerated directory sharing,保存设置后重启Docker Desktop再重试。
内容的提问来源于stack exchange,提问作者Daemonique
相关产品推荐
相关产品推荐

