离线容器中vscode中文包安装失败,根本原因是无图形界面导致命令面板不可用,必须通过cli安装vsix并手动配置locale.json。需确保code cli版本匹配、vsix引擎兼容、用户对~/.vscode-server/extensions/有读写权限,并在~/.vscode-server/data/machine/下正确写入{"locale":"zh-cn"}。

离线容器里装不了中文包?根本卡在“没命令面板”这一步
容器默认没图形界面,Ctrl+Shift+P打不开命令面板,也就没法走 Extensions: Install from VSIX 流程。这时候必须绕过 UI,直接用 CLI 或文件注入方式安装,否则整个流程就断了。
常见错误现象:在容器里启动 VS Code Server(比如通过 code-server),发现右下角始终是 en,点开设置全是英文,连“Configure Display Language”命令都搜不到——不是插件没下对,是压根没注册进扩展系统。
- 确认容器内是否已安装 VS Code Server 或官方
codeCLI(非桌面版);桌面版 VS Code 无法在纯 headless 容器中运行 - 语言包
.vsix必须提前下载好,且发布者为MS-CEINTL,ID 是ms-ceintl.vscode-language-pack-zh-hans - 不要尝试在容器里用浏览器访问 Marketplace——99% 会因 DNS 或代理失败,且容器通常没预装 GUI 环境
用 code --install-extension 命令行安装 vsix 失效?检查三个硬性条件
code --install-extension 在容器里看似可行,但实际静默失败率极高。它只在满足全部条件时才真正注册扩展:VS Code CLI 版本匹配、.vsix 解压后 package.json 中的 engines.vscode 字段兼容、且当前用户有写入 ~/.vscode-server/extensions/ 权限。
典型失效表现:执行完命令无报错,但 ls ~/.vscode-server/extensions/ 下没有 ms-ceintl.vscode-language-pack-zh-hans- 开头的目录,或目录存在却为空。
- 先运行
code --version,取输出第一段(如1.95.2→ 对应^1.95.0),再下载对应版本的vscode-language-pack-zh-hans-1.95.*.vsix - 手动解压
.vsix(本质是 zip),打开package.json,确认"engines": {"vscode": "^1.95.0"}与本地匹配 - 确保执行命令的用户对
~/.vscode-server/extensions/有读写权限;若用 root 启动但以非 root 用户运行 code CLI,路径可能错乱
容器里没图形界面,怎么强制生效 zh-cn 配置?
命令面板不可用时,唯一可靠方式是直接写 locale.json。VS Code Server 启动时优先读这个文件,且不依赖任何 UI 操作。但路径和格式比桌面版更敏感:它不在 ~/.vscode/User/,而在 ~/.vscode-server/data/Machine/ 下的某个子目录(每次启动可能不同),所以不能硬编码路径。
正确做法是让 VS Code Server 自己生成并定位该文件:
- 首次启动 VS Code Server(哪怕只跑几秒),它会在
~/.vscode-server/data/Machine/下创建一个带时间戳的子目录(如8a7b3e...),里面包含locale.json - 停掉服务,找到该文件,用
{"locale":"zh-cn"}替换全部内容(UTF-8 编码、无 BOM、无空格、无逗号) - 重启服务前,务必杀掉所有残留进程:
pkill -f "code-server"或pkill -f "node.*server.js",否则旧配置仍被缓存
远程开发场景下,容器语言包和宿主机完全隔离
你在宿主机上装了中文包,对容器内 VS Code Server 零影响。反过来也一样:容器里配好了 zh-cn,宿主机界面还是英文。这不是 bug,是设计使然——VS Code Server 是独立进程,有自己的扩展目录、配置路径和 locale 加载逻辑。
特别注意 SSH 远程开发模式:即使你用 Remote-SSH 连进容器,也必须在容器内部完成两件事:code --install-extension xxx.vsix + 写 locale.json。点击状态栏 “Install in SSH: xxx” 是无效的,那只是触发宿主机去 Marketplace 下载,而容器根本连不上。
容易被忽略的一点:某些基础镜像(如 mcr.microsoft.com/vscode/devcontainers/base:ubuntu)自带预装的 code-server,但它默认不带任何语言包,也不生成 locale.json。你得自己补全这一环,不能指望镜像“开箱即用”。











