tar EPERM: 操作不允许,futime

29

我有一个node:alpine的Docker镜像。当我使用root用户运行镜像时,没有问题,但是当我使用另一个用户并尝试执行npm install时,我会收到很多来自软件包提取的错误:

npm WARN tar EPERM: operation not permitted, futime

在收到5000个警告信息后,我在npm安装日志中看到了这个:

npm timing action:extract Completed in 276816ms
npm timing action:finalize Completed in 172ms

现在npm安装过程完全卡住了。

有人知道这个错误并知道如何避免吗?


Translated text:

Now the npm installation process is completely stuck.

Does anyone know this error and how to avoid it?

6个回答

99

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

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


8
运作得非常好。非常感谢。@Ildelian 这应该是被采纳的答案。 - Michiel Bugher
适用于Ubuntu 20.04 LTS。非常感谢! - Kartik Shah
6
如果你收到一条消息说C很忙 -> 从PowerShell终止WSL wsl --terminate Ubuntu-20.04 或使用Ubuntu 18等版本。然后重新启动WSL2 Ubuntu并cd /,然后再次尝试。 - eemilk
谢谢!这就是对我有用的! - DannyThunder
1
几次尝试失败后,我决定检查它是否适用于磁盘D。结果它可以工作了!非常感谢。 - lehvolk
显示剩余2条评论

11

我在Windows Linux子系统中也遇到了这个问题,在将项目从Windows移动到Linux后。我尝试使用...但未能解决。

rm -rf node_modules
rm package-lock.json
npm cache clear --force
chown -R username:username *
npm install

这些方法都没有起作用。


futime 错误是由于 tar 工具没有足够的权限来执行 npm 和 node 模块使用的 .tar 文件的必要操作所致。

对于 Alpine Linux,您可能需要以 root 身份解压文件,然后将文件所有者更改为用户,或创建一个具有正确权限的用户拥有的文件夹。

对于 Windows Subsystem for Linux,它似乎无法使用 /mnt/c 下的文件夹,并且拒绝更改权限。 在 Linux 中设置它们没有效果,在 Windows 中设置它们似乎也没有任何影响 - 给“Everyone”原则添加完全控制权也无法解决此问题。


(可能的)Alpine 解决方案:

sudo mkdir project_folder
sudo chown username project_folder
cd project_folder
...  

解决WSL的问题:

将文件夹移动到WSL文件夹中,例如 mv project ~\ 以便正确地处理权限。


3
将项目从我的 Windows 10 迁移到 WSL2 的目录中,解决了我的问题。非常感谢! - Aleksandar Grbic
1
在一番努力后,这对我起作用了。非常感谢你。 - Amr

0

这不是一个优雅的解决方案,但它能够工作... 在您的应用程序目录中:

rm -rf node_modules
mkdir /home/your_user/node_modules
ln -s /home/your_user/node_modules node_modules
npm install

请参观 导览,以及如何回答问题指南 - Muhammad Dyas Yaskur

0

0
如果您在使用类似于Multipass或Docker的工具时遇到此错误,并且您只是将主目录或代码所在位置挂载到该环境中,则可能会出现此错误。
在这种情况下,您可以通过从存储库中拉取代码到该环境中来避免此类错误,而不是尝试从主机上的挂载代码进行操作。
这种方法也更加干净,因为您不会提供比所需更多的权限。这始终可能是一个安全问题。

-1

尝试使用这个命令可能会有帮助:

npm install --user

1
尝试过了,问题依旧...(我没有使用Docker,而是Windows Linux子系统) - genuinefafa

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