Docker容器中本地npm安装是否必须依赖/home/user/.config?
解决Docker容器中npm本地安装的EACCES权限问题
不用纠结要不要创建/home/user目录——完全没必要!你碰到的问题是npm默认想往当前用户的home目录(这里是/home/lz)写缓存或配置文件,但这个目录不存在,而且你没权限创建它。下面给你几个实用的解决办法:
临时指定可写的缓存/全局目录
直接在npm install命令里指定缓存和全局安装路径到你当前有权限的目录(比如当前工作目录):npm install --cache ./npm-cache --prefix ./npm-global要是不想每次都输这么长的命令,也可以先设置环境变量:
export npm_config_cache=$(pwd)/npm-cache export npm_config_prefix=$(pwd)/npm-global npm install这样后续的npm命令都会用你指定的路径,不会再碰/home目录了。
跳过缓存直接安装
如果不在乎安装速度,也可以直接禁用npm的缓存功能,这样它就不会尝试访问home目录了:npm install --no-cache缺点就是每次安装都得重新下载所有依赖,适合小项目应急用。
用root用户运行(不推荐,仅应急)
要是赶时间,也可以切换到root用户执行安装:sudo npm install不过生产环境千万别这么干,root权限会带来安全风险,尽量用前面两种方案。
顺便说下为什么会报错:npm默认会把用户配置文件(比如.npmrc)和包缓存存在当前用户的home目录下。当这个目录不存在时,npm会自动尝试创建它,但如果当前用户没有创建该目录的权限,就会抛出你看到的EACCES错误。
内容的提问来源于stack exchange,提问作者user6791424




