Vite启动开发服务器遇EPERM权限错误及宿主硬盘扫描问题
问题分析与解决方案
为什么Vite会扫描宿主硬盘?
你遇到的/var/www/html/rootfs/host_mnt/c是Docker容器内映射到Windows宿主硬盘的路径。Vite默认会递归扫描项目工作区下的所有文件用于热更新监听,而你的devcontainer配置中工作区路径存在输入错误,加上Laravel Vite插件的refresh功能会扩大文件监听范围,导致Vite意外扫描到宿主硬盘的挂载目录,触发Windows文件系统的权限限制,抛出EPERM错误。
解决方法
1. 修复devcontainer工作区路径
你的devcontainer.json中workspaceFolder存在错误字符串/var/your textwww/html,这会导致工作区识别异常,修正为正确路径:
"workspaceFolder": "/var/www/html"
2. 精准配置Vite忽略规则
之前的忽略规则匹配范围不足,改为绝对路径或更严格的glob模式,确保Vite跳过宿主挂载目录:
import {defineConfig} from 'vite'; import laravel from 'laravel-vite-plugin'; import vue from '@vitejs/plugin-vue'; export default defineConfig({ plugins: [ laravel({ input: 'resources/js/app.js', refresh: true, }), vue({ template: { transformAssetUrls: { base: null, includeAbsolute: false, }, }, }), ], server: { watch: { ignored: [ '/var/www/html/rootfs/**/*', '**/host_mnt/**/*', ], } } });
3. 正确配置容器权限(避免修改宿主文件)
不要执行chown -R 1000:1000 /var/www/html,Windows NTFS文件系统不支持Unix权限修改。在docker-compose.yml中通过用户ID匹配来解决权限问题:
services: mangrove: # 其他原有配置 volumes: - ./:/var/www/html:delegated user: "${UID:-1000}:${GID:-1000}"
这样容器内的sail用户会与宿主用户的UID/GID对齐,避免权限冲突。
4. 清理项目内的无效目录
检查/var/www/html下是否存在rootfs目录,如果是误创建的,直接删除该目录,从根源上阻止Vite扫描到宿主挂载路径。
内容的提问来源于stack exchange,提问作者Drake Scott
相关产品推荐
相关产品推荐

