Homebrew - 错误:Permission denied @ apply2files - /usr/local/lib/docker/cli-plugins

39
在使用Homebrew时,我在macOS Monterey上遇到了以下错误:
Error: Permission denied @ apply2files - /usr/local/lib/docker/cli-plugins

我该如何修复它?

4个回答

112

根据这里的描述,如果最近删除了Docker,则需要手动重新创建Docker文件夹:

mkdir -p /Applications/Docker.app/Contents/Resources/cli-plugins

然后运行

brew cleanup

你应该修复这个问题!

之后,你可以在“应用程序”文件夹中删除Docker应用程序。


"brew cleanup" 给了我相同的错误。 - Joe
22
这暂时解决了问题,但是在再次删除Docker.app后,它又会重新出现。相反,我删除了 sudo rm -r /usr/local/lib/docker/cli-plugins ,该路径是指向那个(不存在的)Docker.app子目录的符号链接。更多信息请参见:https://github.com/Homebrew/homebrew-core/issues/45009 - JW.

22
正如@JW所指出的那样,上面接受的答案...
mkdir -p /Applications/Docker.app/Contents/Resources/cli-plugins

然后运行。
brew cleanup

并非所有人都适用(对我也不适用)。成功的方法是他们建议的:

相反,我删除了sudo rm -r /usr/local/lib/docker/cli-plugins,它是指向那个(不存在的)Docker.app子目录的符号链接。

这是要运行的代码:

sudo rm -r /usr/local/lib/docker/cli-plugins

正如JW所建议的那样,这个链接提供了更多解释:https://github.com/Homebrew/homebrew-core/issues/45009


这对我有用(MBP 2022,Ventura 13.2.1)。谢谢 - Doug Belchamber

7

我尝试了被接受的解决方案,但对我没有用。

最终我用以下命令解决了它:

$ brew cleanup
Error: Permission denied @ apply2files - /usr/local/lib/docker/cli-plugins
$ brew doctor
...
Warning: Broken symlinks were found. Remove them with `brew cleanup`:
  /usr/local/lib/docker/cli-plugins
...
$ sudo chown -R "$(whoami)":admin /usr/local/lib
$ brew cleanup

5

问题

列出文件详细信息

ls -la /usr/local/lib/docker/cli-plugins

显示

lrwxr-xr-x 1 root admin 55 Mar 22 2022 /usr/local/lib/docker/cli-plugins -> /Applications/Docker.app/Contents/Resources/cli-plugins

  • /usr/local/lib/docker/cli-plugins 是一个链接(别名),指向 /Applications/Docker.app/Contents/Resources/cli-plugins
  • 用户 root 具有写入权限 w(也允许在清理过程中删除)
  • 如果您不是 root 用户,则会遇到此问题

解决方案

取决于您的系统需求

推荐

如果您没有或不需要 Docker(可能刚刚删除了它),那么只需删除链接本身即可

sudo rm -r /usr/local/lib/docker/cli-plugins

为什么使用sudo?因为只有root才能访问该链接,而您(当前用户,由whoami标识)无权访问。这就是您首次看到此错误的原因。

为什么使用-r?因为您想要递归删除整个文件夹。

解决方法 #1

  • 临时创建目标文件夹
  • 执行brew cleanup
  • 删除临时文件夹

如果您正在使用docker,并意外删除了/Applications/Docker.app/Contents/Resources/cli-plugins文件夹,或更改了权限,则通过重新创建此文件夹来修复问题,以便链接可以指向现有文件夹。

mkdir -p /Applications/Docker.app/Contents/Resources/cli-plugins
brew cleanup

那么

rm -rf /Applications/Docker.app/Contents/Resources/cli-plugins

或者,因为你创建了整个路径,这意味着你根本不需要 /Applications/Docker.app
rm -rf /Applications/Docker.app

解决方法 #2

递归更改lib文件夹的权限 为什么?因为usr/local/lib本来就是为本地用户准备的。您可以获得对它的访问权限,而不是只有root才能独占任何项目。

参考https://askubuntu.com/questions/138547/how-to-understand-the-ubuntu-file-system-layout

sudo chown -R "$(whoami)":admin /usr/local/lib

附注:可能还有其他解决此问题的方法,但建议消除根本原因。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接