Remote-Containers 中 files.exclude 必须配置在远程端,本地设置无效;应通过 Preferences: Open Remote Settings (JSON) 修改容器内 settings.json,或在 .devcontainer/devcontainer.json 的 customizations.vscode.settings 中预置,并重开文件夹生效。

Remote-Containers 中的 files.exclude 必须配在远程端
你在本地 VS Code 的用户设置里改了 files.exclude,对 Docker 容器里的文件树完全无效。Remote-Containers 模式下,资源管理器渲染的是容器内文件系统,所有排除规则必须作用于容器内部的 VS Code Server 配置。
正确做法是:连上容器后,用 Ctrl+Shift+P(Windows/Linux)或 Cmd+Shift+P(macOS)打开命令面板,运行 Preferences: Open Remote Settings (JSON)。这时编辑的是容器中 ~/.vscode-server/data/Machine/settings.json(路径不可见但生效位置在此)。
- 别在本地
settings.json里写"**/.*": true—— 它只影响本地窗口 - 如果用了
.devcontainer/devcontainer.json,可在其中通过"customizations.vscode.settings"字段预置规则,避免每次重连都手动配 - 改完保存后,必须执行
File > Close Folder再File > Open Folder重新加载工作区,仅刷新窗口不生效
工作区设置优先级高于用户设置,且不会自动同步到容器
即使你已在本地项目根目录写了 .vscode/settings.json,它默认也不会被复制进容器。Remote-Containers 不会自动挂载或读取本地 .vscode 文件夹内容(除非显式配置 "mounts" 或 "copyFilesFromContainer")。
所以常见错误是:本地项目里有 "files.exclude": {"**/node_modules": true},但容器里 node_modules 依然显示——因为那条规则根本没进容器。
- 想让工作区设置生效,得在
.devcontainer/devcontainer.json中加:"customizations": { "vscode": { "settings": { "files.exclude": { "**/node_modules": true, "**/.DS_Store": true } } } } - 这条配置会在容器启动时写入远程
settings.json,且覆盖任何用户级设置 - 注意:如果容器里已有
~/.vscode-server/data/Machine/settings.json,新配置可能被合并而非覆盖,建议首次部署前清空该文件或重建容器
search.exclude 和 files.exclude 是两套独立开关
你在容器里让 .env 显示出来了,但 Ctrl+Shift+F 还是搜不到?大概率是 search.exclude 仍在起作用。它和 files.exclude 没有任何联动关系,必须单独配置。
- 同样在
Preferences: Open Remote Settings (JSON)中检查是否存在"search.exclude" - 若存在
"**/.*": true,删掉或设为false;若不存在,显式加上"**/.*": false更稳妥(VS Code 有内置默认值) - 特别注意
.gitignore对搜索无影响——VS Code 的search.exclude不读取它,哪怕你开了git.ignoreLegacyExclude
隐藏 node_modules 时要注意安装方式差异
容器里 node_modules 是否该隐藏,取决于它的来源。如果是 npm install 直接装在容器内,"**/node_modules": true 能正常生效;但若通过 volume 挂载了宿主机的 node_modules,VS Code 可能因权限或路径解析问题无法稳定识别。
- 推荐做法:在
.devcontainer/devcontainer.json的"postCreateCommand"中执行npm install,确保模块装在容器内部文件系统 - 避免用
mounts把宿主机node_modules挂进去——既破坏容器可移植性,又容易触发 VS Code 排除逻辑失效 - 若必须挂载,改用
"**/node_modules/**": true(带双星号递归),比"**/node_modules": true更可靠


















