docker desktop wsl集成开关重启后自动关闭,是因为其依赖发行版运行状态与配置文件双重校验:若发行版非running/stopped状态、名称含特殊字符、default发行版变更未手动同步,或settings.json写入失败,ui检测失败即自动禁用开关。

WSL Integration 开关为什么重启后自动关闭
Docker Desktop 的 WSL 集成配置不是写死在 UI 里的,而是依赖两个独立状态:一是 Docker Desktop 自身的配置文件是否持久化保存,二是对应 WSL 发行版是否处于可访问、可执行状态。一旦其中任一环节异常(比如发行版被重命名、wsl --shutdown 后未正确恢复、或 Docker Desktop 异常退出),设置就会“看起来”丢失——实际是 UI 检测到发行版不可用,自动禁用了开关。
-
Settings → Resources → WSL integration页面里勾选的发行版,必须同时满足:wsl -l -v中显示为Running或至少Stopped状态,且不能是Unknown或报错 - 如果发行版名称含空格、中文、或特殊字符(如
Ubuntu-24.04 (dev)),Docker Desktop 可能无法稳定识别,导致每次重启都重置开关 - Docker Desktop 4.50+ 版本对配置持久化更敏感,若
%APPDATA%\Docker\settings.json文件权限异常或被杀毒软件拦截写入,也会丢配置
如何确认 WSL 集成配置是否真正生效
别只信 Settings 页面的勾选框。真正有效的集成,必须满足「Docker CLI 在 WSL 终端中可调用 + 能连上 daemon」。最直接验证方式是打开 Ubuntu 终端,运行:
docker info --format '{{.ServerVersion}}'
如果输出版本号(如 27.2.0),说明集成已通;如果报错 Cannot connect to the Docker daemon,那即使 UI 显示已启用,实际也未生效。
- 检查
~/.docker/config.json是否存在且不为空——缺失该文件会导致 CLI 认不出 daemon 地址 - 运行
cat /etc/wsl.conf,确认没有[interop]下的enabled = false,否则会禁用 WSL 与 Windows 的进程互通能力 - 若使用非默认发行版(如
Ubuntu-24.04),需在 Settings 中**单独勾选它**,而不是只勾「Enable integration with my default WSL distro」
wsl --set-default 后集成开关失效的典型场景
当你执行 wsl --set-default Ubuntu-24.04 更换默认发行版,但 Docker Desktop 的 Settings 页面仍只勾了旧的 Ubuntu,就会出现「设置没丢,但不起作用」的假象。Docker Desktop 不会自动同步默认发行版变更,也不会主动刷新已勾选列表。
- 必须手动进入 Settings → WSL integration → 关闭旧发行版开关,再打开新发行版的开关 → 点击
Apply & Restart - 如果新发行版是刚从 tar 导入的(
wsl --import),首次启动时可能卡在初始化,wsl -l -v显示Stopping或无响应,此时强行勾选会导致后续启动失败 - 执行
wsl --set-version Ubuntu-24.04 2前,务必确认该发行版当前是Stopped状态,否则升级会静默失败,集成开关也无法识别
配置丢失后最稳妥的恢复路径
不要反复点 Apply & Restart。很多情况下,问题出在 WSL 实例本身卡住,而非 Docker Desktop 配置损坏。优先清理底层状态,再重建集成关系。
- 先彻底退出 Docker Desktop(右键托盘图标 →
Quit Docker Desktop) - 管理员 PowerShell 执行:
wsl --shutdown,然后等 10 秒,再运行wsl -l -v确认所有发行版状态为Stopped - 删除
%LOCALAPPDATA%\Docker\wsl\data\(这是 Docker Desktop 的 WSL 运行时数据,删掉会重置 daemon 配置,但不删镜像) - 重启 Docker Desktop,重新进 Settings → WSL integration → 勾选目标发行版 →
Apply & Restart
真正容易被忽略的是:wsl --shutdown 后,某些发行版(尤其是通过 wsl --import 创建的)不会自动重启,需要手动运行一次 wsl -d Ubuntu-24.04 触发初始化,否则 Docker Desktop 检测时仍会跳过它。











