tar EPERM:不允许操作,futime

Ild*_*ian 24 node.js docker alpine-linux

我有一个node:alpineDocker 镜像。当我以 root 用户身份运行图像时,我没有问题,但是当我使用另一个用户并尝试这样做时,npm install我从包提取中收到了很多错误:

npm WARN tar EPERM: operation not permitted, futime
Run Code Online (Sandbox Code Playgroud)

在收到 5000 条警告消息后,我在 npm 安装日志中看到了这一点:

npm timing action:extract Completed in 276816ms
npm timing action:finalize Completed in 172ms
Run Code Online (Sandbox Code Playgroud)

没有更多,npm 安装过程完全挂起。

任何人都知道这个错误并知道如何避免它?

小智 77

WSL 的解决方案:

我通过安装 C:/ 解决了这个问题,默认权限绑定到我的用户而不是 root。我遵循了这里的指南:https : //devblogs.microsoft.com/commandline/chmod-chown-wsl-improvements/

sudo umount /mnt/c
sudo mount -t drvfs C: /mnt/c -o metadata,uid=1000,gid=1000,umask=22,fmask=111
Run Code Online (Sandbox Code Playgroud)

这会将所有文件安装在 C 驱动器上作为我的用户而不是 root。因此 sudo 不需要运行npm i

  • 工作起来就像一个魅力。非常感谢。@Ildelian 这应该是公认的答案。 (8认同)
  • 如果你收到一条消息说 C is busy -> 从 powershell ```wsl --terminate Ubuntu-20.04``` 或使用 ubuntu 18 等终止 wsl。然后再次启动 wsl2 ubuntu 和 ```cd /``` 然后再试一次 (2认同)

ant*_*nyh 8

在将项目从 Windows 转移到 Linux 之后,我在 Windows Linux 子系统中也有这个。我无法修复它

rm -rf node_modules
rm package-lock.json
npm cache clear --force
chown -R username:username *
npm install
Run Code Online (Sandbox Code Playgroud)

这些都没有奏效。


futime错误是由于该tar实用程序没有足够的权限来执行必要的操作来扩展 npm 和节点模块使用的 .tar 文件。

在 Alpine Linux 的情况下,您可能需要以 root 身份解压缩chown文件,然后创建一个具有正确权限的用户拥有的文件夹。

对于适用于 Linux 的 Windows 子系统,它似乎不适用于下面的文件夹/mnt/c并拒绝更改权限。在 Linux 中设置它们没有任何效果,在 Windows 中设置它们似乎也没有任何区别 - 向“所有人”原则添加完全控制并不能解决这个问题。


Alpine 的(可能)解决方案:

sudo mkdir project_folder
sudo chown username project_folder
cd project_folder
...  
Run Code Online (Sandbox Code Playgroud)

WSL 的解决方案:

将文件夹移动到 WSL 文件夹中,例如。mv project ~\以便权限正常工作。

  • 将项目从我的 Windows 10 移动到 WSL2 ~ 目录为我解决了这个问题。非常感谢! (3认同)

Kar*_*rma -1

尝试使用此命令可能会有所帮助:

npm install --user
Run Code Online (Sandbox Code Playgroud)