Homebrew - 错误:权限被拒绝@ apply2files - /usr/local/lib/docker/cli-plugins

Fra*_*z L 50 macos homebrew docker

Homebrew 在使用 macOS Monterey 时出现此错误:

Error: Permission denied @ apply2files - /usr/local/lib/docker/cli-plugins
Run Code Online (Sandbox Code Playgroud)

我该如何修复它?

Fra*_*z L 140

如此处所写https://flaviocopes.com/homebrew-fix-permission-denied-apply2files/

如果您最近删除了 Docker,则必须手动重新创建 Docker 文件夹:

mkdir -p /Applications/Docker.app/Contents/Resources/cli-plugins
Run Code Online (Sandbox Code Playgroud)

然后运行

brew cleanup
Run Code Online (Sandbox Code Playgroud)

你应该已经解决了这个问题!

之后,您可以删除Application文件夹中的Docker应用程序

  • 这暂时解决了问题,但再次删除 Docker.app 后,它又重新出现。相反,我删除了“sudo rm -r /usr/local/lib/docker/cli-plugins”,它是指向(不存在的)Docker.app 子目录的符号链接。更多信息在这里:https://github.com/Homebrew/homebrew-core/issues/45009 (26认同)
  • `brew cleanup` 给了我同样的错误 (2认同)

Aus*_*lff 29

正如@JW 所指出的,上面接受的答案......

mkdir -p /Applications/Docker.app/Contents/Resources/cli-plugins
Run Code Online (Sandbox Code Playgroud)

然后运行

brew cleanup
Run Code Online (Sandbox Code Playgroud)

并不适合所有人(也不适合我)。他们的建议是有效的:

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

这是要运行的代码:

sudo rm -r /usr/local/lib/docker/cli-plugins
Run Code Online (Sandbox Code Playgroud)

正如 JW 建议的,此链接解释了更多信息:https ://github.com/Homebrew/homebrew-core/issues/45009


Emi*_*det 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
Run Code Online (Sandbox Code Playgroud)


Ram*_*ils 6

问题

列出文件详细信息

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
Run Code Online (Sandbox Code Playgroud)

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

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

解决方法#1

  • 临时创建目标文件夹
  • 酿造清理
  • 删除临时文件夹

如果您使用 docker,但意外删除了/Applications/Docker.app/Contents/Resources/cli-plugins文件夹或更改了权限,则这也适用,然后通过再次创建此文件夹来修复它,以便链接可以指向现有文件夹。

mkdir -p /Applications/Docker.app/Contents/Resources/cli-plugins
brew cleanup
Run Code Online (Sandbox Code Playgroud)

然后

rm -rf /Applications/Docker.app/Contents/Resources/cli-plugins
Run Code Online (Sandbox Code Playgroud)

或者,因为您创建了整个路径,这意味着您/Applications/Docker.app无论如何都不需要

rm -rf /Applications/Docker.app
Run Code Online (Sandbox Code Playgroud)

解决方法#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

PS:可能有更多方法可以解决此问题,但建议消除根本原因。