Docker-Android: Android Emulator in a Docker Container
Docker-Android packages a full Android emulator, ADB access, and a noVNC web viewer into one Docker container, so you can spin up a device without touching Android Studio. Reach for it if you need a disposable Android emulator you can drive from a CI pipeline or a headless server. Skip it if you're on Windows or macOS without a working Ubuntu VM, or if you need Android 15/16 — those sit behind the paid Docker-Android-Pro sponsorship.
What is Docker-Android?
Docker-Android is a Docker image that bundles an Android emulator with noVNC, so you can view and drive the device from a browser instead of Android Studio. It ships image tags for Android 9.0 through 14.0 (API 28-34) plus a Genymotion-based variant, with ADB exposed for outside tools to connect. The README positions it for building Android projects and running UI or unit tests with frameworks like Appium and Espresso.
Key Features for Android Development and Testing
- ✓Device skins for phones and tablets — Samsung Galaxy S10 down to Nexus One, plus Nexus 7 and Pixel C tablets, per the README's device list.
- ✓noVNC in the browser — connect to http://localhost:6080 to watch and interact with the emulator without a native VNC client.
- ✓Log sharing through the web UI, so container logs are readable without shelling in.
- ✓ADB connect from the host, letting you attach existing Android tooling to the container's emulator.
- ✓Genymotion Cloud integration on AWS, GCP, and Alibaba Cloud, per the README.
- ✓Image tags spanning Android 9.0 to 14.0 (API 28-34), each pinned to a specific release version if you need reproducible builds.
Common Use Cases for Docker-Android
- •Building an Android project inside the container instead of a separate local toolchain.
- •Running UI tests with Appium against the emulator.
- •Controlling the Android emulator from the host machine over ADB.
- •Simulating SMS on the emulator for app testing flows.
- •Wiring the container into a Jenkins pipeline for CI.
- •Deploying to Azure, AWS, or GCP, per the README's cloud use case doc.
Setting Up Docker-Android
Setting up Docker-Android needs nothing more than Docker installed on the host — that's the only requirement the README lists. The catch is the OS: the image only runs on Ubuntu, so macOS and Windows users need a virtual machine running Ubuntu with virtualization turned on underneath it. Check that your machine actually exposes virtualization before pulling an image: run `sudo apt install cpu-checker` then `kvm-ok`. From there you pick one of the emulator image tags, such as `budtmo/docker-android:emulator_11.0`, and run it with `--device /dev/kvm` so the emulator gets hardware acceleration.
Running an Android Emulator Container
Running the container example from the README looks like: `docker run -d -p 6080:6080 -e EMULATOR_DEVICE="Samsung Galaxy S10" -e WEB_VNC=true --device /dev/kvm --name android-container budtmo/docker-android:emulator_11.0`. Once it's up, open `http://localhost:6080` in a browser to see the emulator through noVNC, and run `docker exec -it android-container cat device_status` to check whether it's finished booting. Data doesn't survive a restart by default. The README says the emulated device is destroyed on container restart unless you mount a volume at `/home/androidusr`, e.g. `docker run -v data:/home/androidusr budtmo/docker-android:emulator_11.0`.
Strengths
- ✓Twelve device profiles and skins, from Samsung Galaxy S10 down to Nexus One, so you're not stuck testing on one virtual phone.
- ✓noVNC means you can watch the emulator run from any browser — no VNC client, no X server on your laptop.
- ✓ADB is exposed to the host, so your existing Appium/Espresso test setup can point at the container like any other device.
- ✓Image tags are pinned to both Android version and release version, so you can lock a CI pipeline to a known-good build.
Normal vs. Pro Version Features
- △The free image has no headless mode — it always renders a full graphical desktop through noVNC, which is pro-only per the README's comparison table.
- △Newer Android versions like 15 and 16 are Docker-Android-Pro exclusives, so the free tags top out at Android 14.0 (API 34).
- △No root-privileged commands or on-the-fly proxy/language configuration in the normal version — those are also gated behind Docker-Android-Pro, which requires being an active GitHub Sponsor.
- △Only runs natively on Ubuntu; macOS and Windows users add a VM layer just to get started.
- △Emulator state is wiped on every container restart unless you remember to mount a volume at /home/androidusr.
Considering Genymotion and Other Options
Frequently Asked Questions
Docker-Android ships prebuilt images for Android 9.0 through 14.0 (API levels 28 to 34), plus a separate Genymotion-based image, according to the image table in the README.
Docker-Android's image only runs on Ubuntu, so Windows and macOS users need to run it inside a virtual machine with Ubuntu and virtualization enabled, per the README's Quick Start section.
Docker-Android integrates directly with Genymotion Cloud rather than replacing it — the README describes it as integrated with Genymotion on services like Genymotion SAAS, AWS, GCP, and Alibaba Cloud, and it ships a separate genymotion image tag alongside its own emulator images.
Docker-Android-Pro is a separate, sponsor-only image with features the free version lacks, including proxy setup, on-the-fly language configuration, root-privileged commands, headless mode, Selenium 4.x integration, and support for newer Android versions, per the README's comparison table.
Docker-Android destroys the emulated device by default on container restart; persisting data requires mounting a volume at /home/androidusr, as documented in the README's 'Persisting data' section.
Docker-Android supports WSL2 hardware acceleration on Windows 11 only, via adding the user to the kvm usergroup and enabling the nestedVirtualization flag in .wslconfig, per the README's WSL2 setup instructions.
The problem it solves
Android emulators are GUI-first — AVD wants a desktop, a GPU, and a human clicking around, which is a bad fit for a build server or a laptop you're SSH'd into. Docker-Android solves the specific gap of running that emulator inside a container while still giving you a way to look at the screen: noVNC in a browser, plus ADB exposed to the host so existing test tooling can attach. That's narrower than 'Android testing is hard' — it's specifically the packaging problem of getting an emulator, its GPU/KVM dependency, and a remote display into one image you can pull on a CI runner or a cloud box.
Who should try it — and who should skip
Try Docker-Android if you run Android UI tests in CI and want a disposable emulator you don't have to install Android Studio to get — Jenkins users especially, since it's one of the README's documented use cases. Skip it if you're doing local day-to-day app development on a Mac or Windows laptop without a real Ubuntu VM already set up, or if you specifically need Android 15/16, since those versions sit behind the sponsor-only Docker-Android-Pro image.
