You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Windows宿主机的Docker容器中运行Android模拟器?

嘿,我之前也在Windows上折腾过用Docker跑Android模拟器的需求,确实大部分现成镜像因为KVM的限制没法直接用,但其实借助WSL2的新特性完全可以实现,下面是亲测有效的方案:

核心原理

Windows宿主机本身不支持给Docker容器直接暴露KVM,但Windows 11 22H2及以上版本的WSL2已经支持嵌套虚拟化——也就是说,WSL2本身作为虚拟机,可以开启KVM,然后在WSL2里运行的Docker容器就能正常调用KVM功能了。这就是成功的关键。

第一步:准备好支持嵌套虚拟化的WSL2环境
  • 先确认你的Windows版本:必须是Windows 11 22H2及以上,或者Windows 10 21H2及以上(Win10的支持有限,更推荐Win11)。
  • 开启Windows的虚拟化功能:
    打开「控制面板」→「程序」→「启用或关闭Windows功能」,勾选以下选项后重启电脑:
    • 适用于Linux的Windows子系统
    • Hyper-V
    • 虚拟机平台
  • 设置WSL默认版本为2:打开PowerShell,执行命令:
    wsl --set-default-version 2
    
  • 更新WSL内核到最新:继续在PowerShell里运行:
    wsl --update
    
  • 开启WSL2的嵌套虚拟化:
    打开你的WSL2发行版(比如Ubuntu),创建或编辑/etc/wsl.conf文件:
    sudo nano /etc/wsl.conf
    
    添加以下内容:
    [wsl2]
    nestedVirtualization=true
    
    保存后,在PowerShell里关闭WSL使配置生效:
    wsl --shutdown
    
    重新打开WSL发行版即可。
第二步:在WSL2的Docker中运行Android模拟器

现在你的WSL2已经支持KVM了,接下来可以选择合适的镜像运行:

  • 优先选择适配WSL2的Android模拟器镜像,比如基于Android x86的镜像,或者专门标注支持WSL2的镜像。
  • 运行示例(以一个适配镜像为例):
    docker run -d \
      --name android-emulator \
      --privileged \
      -p 5555:5555 \
      -e DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0 \
      -v /tmp/.X11-unix:/tmp/.X11-unix \
      my-android-emulator-image:latest
    
    这里的关键参数说明:
    • --privileged:必须添加,让容器获得足够权限访问KVM资源。
    • -p 5555:5555:映射adb连接端口,方便从Windows或WSL里用adb connect localhost:5555连接模拟器。
    • DISPLAY变量和X11挂载:因为Windows没有原生X服务器,需要先在Windows上安装VcXsrv,启动时勾选「Disable access control」,这样WSL和Docker容器才能把模拟器界面输出到Windows的X服务器上。
替代方案:直接在WSL2里运行模拟器(更稳定)

如果Docker的方式还是遇到问题,其实可以跳过Docker,直接在WSL2里安装Android模拟器,步骤更简单且稳定性更高:

  1. 在WSL2的Ubuntu里安装依赖:
    sudo apt update && sudo apt install openjdk-11-jdk android-sdk qemu-kvm
    
  2. 配置环境变量:
    echo "export ANDROID_HOME=/usr/lib/android-sdk" >> ~/.bashrc
    echo "export PATH=\$PATH:\$ANDROID_HOME/emulator:\$ANDROID_HOME/tools:\$ANDROID_HOME/platform-tools" >> ~/.bashrc
    source ~/.bashrc
    
  3. 创建模拟器:
    avdmanager create avd -n my-android-avd -k "system-images;android-30;google_apis;x86_64"
    
  4. 运行模拟器:
    emulator -avd my-android-avd -gpu swiftshader_indirect
    
    如果要后台运行,加上-no-window参数,之后用adb连接即可。
常见问题排查
  • 提示KVM不可用:在WSL2里执行kvm-ok,如果返回「KVM is available on this system」就没问题,否则检查WSL2的嵌套虚拟化配置是否生效,或者Windows的虚拟化功能是否开启。
  • 模拟器界面不显示:检查VcXsrv是否启动并勾选了「Disable access control」,DISPLAY变量是否设置正确,容器是否挂载了/tmp/.X11-unix目录。

内容的提问来源于stack exchange,提问作者Amir Alam

火山引擎 最新活动