A Dockerized Android emulator (x86) with native performance and seamless ADB & Web Scrcpy access.
10K+
Dockerify Android is a Dockerized Android emulator supporting multiple CPU architectures (x86 and ARM/ARM64 apps via ndk_translation) with native performance and seamless ADB & Web access. It allows developers to run Android virtual devices (AVDs) efficiently within Docker containers, facilitating scalable testing and development environments.
Access and control the Android emulator directly in your web browser with the integrated scrcpy-web interface! No additional software needed - just open your browser and start using Android.
Benefits of Web Interface:
- No extra software to install
- Access from any computer with a web browser
- Full touchscreen and keyboard support
- Perfect for remote work or sharing the emulator with team members
Before you begin, ensure you have met the following requirements:
Check KVM Support:
egrep -c '(vmx|svm)' /proc/cpuinfo
A non-zero output indicates KVM support.
To simplify the setup process, you can use the provided docker-compose.yml file.
Clone the Repository:
git clone https://github.com/shmayro/dockerify-android.git
cd dockerify-android
Run Docker Compose:
docker compose up -d
Note: This command launches the Android emulator and web interface. First boot takes some time to initialize. Once ready, the device will appear in the web interface at http://localhost:8000.
The quickest and easiest way to interact with the Android emulator is through your web browser:
http://localhost:8000
Note: First boot may take some time as the Android emulator needs to fully initialize. When everything is ready, the device will appear in the web interface as shown in the screenshot above.
If you need direct ADB access to the emulator:
adb connect localhost:5555
adb devices
Expected Output:
connected to localhost:5555
List of devices attached
localhost:5555 device
For a native desktop experience, you can use scrcpy:
scrcpy -s localhost:5555
Note: Ensure
scrcpyis installed on your host machine. Installation Guide
| Variable | Description | Default |
|---|---|---|
DNS | Private DNS server used inside the emulator | one.one.one.one |
RAM_SIZE | RAM in megabytes allocated to the emulator | 4096 |
SCREEN_RESOLUTION | Screen size in WIDTHxHEIGHT format (e.g. 1080x1920) | device default |
SCREEN_DENSITY | Screen pixel density in DPI | device default |
ROOT_SETUP | Set to 1 to enable rooting and Magisk. Can be turned on after the first start but cannot be undone without recreating the data volume. | 0 |
GAPPS_SETUP | Set to 1 to install PICO GAPPS. Can be turned on after the first start but cannot be undone without recreating the data volume. | 0 |
ARM_TRANSLATION | Set to 1 to enable ARM translation (ndk_translation) for running ARM/ARM64 apps on x86_64. Can be turned on after the first start but cannot be undone without recreating the data volume. | 0 |
The first time you start the container, it will perform a comprehensive setup process that includes:
GAPPS_SETUP=1): Adds essential Google services.ROOT_SETUP=1): Performs multiple reboots to:
ARM_TRANSLATION=1): Installs ndk_translation ARM translation layer to enable running ARM/ARM64 native apps on x86_64:
ro.product.cpu.abilist = x86_64,x86,arm64-v8a,armeabi-v7a,armeabiextras directory to /sdcard/Download so files like APKs or Magisk modules are ready for manual installation on the device.ROOT_SETUP, GAPPS_SETUP, and ARM_TRANSLATION are checked on every start. If you enable them after the first boot, the script installs the requested components once and marks them complete so they won't run again. Removing them later requires recreating the data volume.
Important: The first boot can take 10-15 minutes to complete. You'll know the process is finished when you see the following log output:
Broadcast completed: result=0 Success !! 2025-04-22 13:45:18,724 INFO exited: first-boot (exit status 0; expected)
Note: If the Android emulator has restarted for any reason, it's recommended to restart the Docker container to reapply optimizations:
docker compose restartThis ensures the following optimizations are applied:
- Disabled animations for better performance
- Screen timeout set to 15 seconds
- Disabled rotation
- Custom DNS settings
- Airplane mode enabled (with WiFi still active)
- Data connection disabled
After the first boot completes, a file marker is created to prevent running the initialization again on subsequent starts.
All logs from the emulator and boot processes are redirected to Docker's standard log system. To view all container logs:
docker logs -f dockerify-android
This includes:
Dockerify Android uses GitHub Releases as the source of truth for stable project versions. Publishing a release such as v1.2.3 creates matching Docker image tags: 1.2.3, 1.2, 1, and latest.
Builds from the main branch are published as development images using edge and sha-<short-sha> tags.
ADB Connection Refused:
Ensure ADB Server is Running:
adb start-server -a
Verify Firewall Settings: Ensure that port 5555 is open on your server.
Check Emulator Status: Ensure the emulator has fully booted by checking logs.
docker logs dockerify-android
First Boot Taking Too Long:
docker logs -f dockerify-androidARM/ARM64 Apps Still Not Installing:
ARM_TRANSLATION=1 is set in your docker-compose.yml or environment variablesdocker logs dockerify-android | grep -i "ARM translation"adb shell getprop ro.product.cpu.abilist
x86_64,x86,arm64-v8a,armeabi-v7a,armeabiARM_TRANSLATION after the first boot, restart the container to run the install stepEmulator Not Starting:
Check Container Logs:
docker logs dockerify-android
KVM Not Accessible:
Verify KVM Installation:
lsmod | grep kvm
Check Permissions: Ensure your user has access to /dev/kvm.
Contributions are welcome! To contribute:
Fork the Repository
Create a Feature Branch:
git checkout -b feature/YourFeature
Commit Your Changes:
git commit -m "Add Your Feature"
Push to the Branch:
git push origin feature/YourFeature
Open a Pull Request
Please ensure your contributions adhere to the project's coding standards and include relevant tests.
This project is licensed under the MIT License.
Content type
Image
Digest
sha256:72a9ea73e…
Size
1.4 GB
Last updated
17 days ago
docker pull shmayro/dockerify-android