Docker run在WSL中不生效,主因是CLI未连上Docker Desktop引擎,需检查docker info确认Server Version和OS标识,启用WSL Integration并执行wsl --shutdown后切换上下文为desktop-linux。

docker run 命令在 WSL 终端里不生效?先确认 CLI 是否连对了引擎
很多人在 WSL 里敲 docker run hello-world,结果报错 Cannot connect to the Docker daemon,或者直接卡住不动。这不是命令写错了,而是 WSL 里的 docker CLI 默认没连上 Docker Desktop 启动的引擎——它可能连的是 WSL 自带的、空跑的 dockerd(如果手动装过),也可能压根没配置通。
关键判断点:docker info 输出里必须看到 Server Version: xx.x 且 Operating System: Docker Desktop;如果显示 Linux 或报错,说明 CLI 没走 Desktop 的服务。
- 确保 Docker Desktop 已启动(任务栏有鲸鱼图标,且状态为 Running)
- 检查 WSL 发行版是否已启用集成:右键任务栏 Docker 图标 → Settings → Resources → WSL Integration → 开启对应发行版(如
Ubuntu-22.04) - 重启 WSL:执行
wsl --shutdown,再重新打开终端 - 验证连接:
docker context ls应显示desktop-linux为当前上下文;若不是,运行docker context use desktop-linux
已有容器怎么从 WSL 终端启动?别用 docker start,先看它属于哪个上下文
WSL 终端里执行 docker start 失败,常见原因是该容器是通过 Windows PowerShell 或 Docker Desktop GUI 创建的,但默认上下文不在 WSL 环境中。Docker Desktop 实际维护两套容器视图:一套是 Windows 原生 CLI 的,一套是 WSL 集成后暴露的——只有开启 WSL Integration 的发行版才能看到并操作 Desktop 托管的容器。
- 先查容器是否存在且可被 WSL CLI 看见:
docker ps -a。如果列表为空,但你知道容器存在,说明它没注册到当前上下文 - 强制切换上下文:
docker context use desktop-linux,再试docker start <container_name></container_name> - 如果容器名含中文、空格或特殊字符,务必用引号包裹:
docker start "my-app-v2" - 启动后进容器调试:
docker exec -it <container_name> /bin/sh</container_name>(注意:Alpine 镜像用/bin/sh,Ubuntu/Debian 通常用/bin/bash)
挂载 Windows 路径时权限异常或文件延迟?绕开 /mnt/c 直接用 /wsl$/
在 WSL 终端里运行容器时,若用 -v /mnt/c/Users/me/project:/app 挂载 Windows 文件,常遇到文件修改不实时、Permission denied 或构建失败。这是因为 /mnt/c 是跨文件系统挂载,NTFS 权限映射不可靠,且 I/O 性能差。
- 把项目移到 WSL 文件系统内:例如放在
~/project,再用-v /home/user/project:/app挂载,性能和权限都稳定 - 若必须用 Windows 路径,改用
/wsl$/<distro_name>/home/<user>/project</user></distro_name>形式(需先确认 WSL 发行版名:wsl -l -v) - 避免在挂载路径下执行
npm install或pip install——这些工具依赖文件系统 inotify,/mnt/c不支持 - 临时修复权限:启动容器时加
--user $(id -u):$(id -g),但治标不治本,优先迁出/mnt/c
GPU 容器在 WSL 终端里启动失败?--gpus 参数只在 Desktop 引擎下有效
你在 WSL 里敲 docker run --gpus all nvidia/cuda:12.4.0-base-ubuntu22.04 nvidia-smi,结果报错 unknown flag: --gpus 或 no NVIDIA GPU device found。这通常不是驱动问题,而是 CLI 没连上支持 GPU 的 Desktop 引擎,或者 WSL Integration 未启用 GPU 支持。
- 确认 Windows 侧已安装 NVIDIA 驱动(版本 ≥ 535.104),且未禁用 WSL GPU 支持(PowerShell 中运行
wsl --update并重启) - Docker Desktop 设置中:Settings → General → 勾选
Use the WSL 2 based engine;Settings → Resources → WSL Integration → 确保发行版开关开启;Settings → Resources → GPU → 勾选Enable GPU support for WSL - 重启 WSL:
wsl --shutdown,再重开终端 - 验证:
docker run --rm --gpus all nvidia/cuda:12.4.0-base-ubuntu22.04 nvidia-smi应输出 GPU 信息;若仍失败,检查docker info | grep -i gpu是否显示Runtimes: runc nvidia
真正卡住的地方往往不是命令本身,而是上下文错位——WSL 终端、Docker Desktop 引擎、Windows 文件系统、GPU 驱动四者之间只要一环没对齐,docker start 就会静默失败或报看似无关的错误。每次出问题,先跑一遍 docker context ls 和 wsl -l -v,比重装 Docker 有用得多。


















