Docker运行时触发Vite权限错误问题排查
Vite创建
.vite/deps_temp目录时权限被拒的解决方案 错误日志
web_services-api-1 | Watching for file changes with StatReloader web_services-frontend-1 | node:fs:1395 web_services-frontend-1 | handleErrorFromBinding(ctx); web_services-frontend-1 | ^ web_services-frontend-1 | web_services-frontend-1 | Error: EACCES: permission denied, mkdir '/frontend/node_modules/.vite/deps_temp' web_services-frontend-1 | at Object.mkdirSync (node:fs:1395:3) web_services-frontend-1 | at runOptimizeDeps (file:///frontend/node_modules/vite/dist/node/chunks/dep-5e7f419b.js:42704:14) web_services-frontend-1 | at Timeout._onTimeout (file:///frontend/node_modules/vite/dist/node/chunks/dep-5e7f419b.js:42112:58) web_services-frontend-1 | at process.processTicksAndRejections (node:internal/process/task_queues:95:5) { web_services-frontend-1 | errno: -13, web_services-frontend-1 | syscall: 'mkdir', web_services-frontend-1 | code: 'EACCES', web_services-frontend-1 | path: '/frontend/node_modules/.vite/deps_temp' web_services-frontend-1 | } web_services-frontend-1 | web_services-frontend-1 | Node.js v18.13.0
当前权限配置
drwxrwxrwx 312 arundeep docker 12288 Jan 23 14:24 node_modules drwxrwxr-x 6 arundeep docker 4096 Jan 22 21:14 vite drwxrwxr-x 2 arundeep docker 4096 Jan 22 21:14 bin -rw-rw-r-- 1 arundeep docker 3913 Jan 22 21:14 client.d.ts drwxrwxr-x 5 arundeep docker 4096 Jan 22 21:14 dist -rw-rw-r-- 1 arundeep docker 997 Jan 22 21:14 index.cjs -rw-rw-r-- 1 arundeep docker 168938 Jan 22 21:14 LICENSE.md -rw-rw-r-- 1 arundeep docker 3980 Jan 22 21:14 package.json -rw-rw-r-- 1 arundeep docker 1164 Jan 22 21:14 README.md drwxrwxr-x 3 arundeep docker 4096 Jan 22 21:14 src drwxrwxr-x 2 arundeep docker 4096 Jan 22 21:14 types
问题分析
虽然node_modules目录权限为777,但Vite创建目标目录失败,常见原因包括:
- 运行Vite的进程用户不属于
arundeep或docker组,无写入权限 .vite父目录(若已存在)权限配置异常- Docker卷挂载时的权限限制导致写入失败
解决方法
1. 手动创建目录并修正权限
直接创建目标目录并赋予对应权限:
mkdir -p /frontend/node_modules/.vite/deps_temp chown -R arundeep:docker /frontend/node_modules/.vite chmod -R 775 /frontend/node_modules/.vite
2. 修改Vite缓存目录路径
在vite.config.js/vite.config.ts中指定缓存目录到项目内有权限的路径:
export default { cacheDir: './.vite-cache' }
3. 调整Docker运行用户
如果是Docker环境,启动容器时指定运行用户为arundeep:docker:
docker run -u arundeep:docker [其他启动参数]
或者在Dockerfile中添加用户组配置:
RUN usermod -aG docker node
4. 检查挂载卷权限
确认/frontend挂载的卷不是只读模式,宿主机对应目录需允许写入:
# 宿主机端修正权限 chown -R arundeep:docker /宿主机对应前端目录路径 chmod -R 775 /宿主机对应前端目录路径
内容的提问来源于stack exchange,提问作者Arundeep Chohan
相关产品推荐
相关产品推荐

