A minimal, optimized Docker image for running x86 and x86_64 programs on ARM64 systems using FEX-Emu.
Get it from DockerHub: https://hub.docker.com/r/stevenlafl/fex
FEX allows you to run x86 applications on ARM64 Linux devices, similar to qemu-user and box64. It offers broad compatibility with both 32-bit and 64-bit x86 binaries, and it can be used alongside Wine/Proton to play Windows games.
- API Forwarding: Forwards API calls to host system libraries (OpenGL, Vulkan) to reduce emulation overhead
- Code Cache: Experimental code cache minimizes in-game stuttering
- Per-App Configuration: Tweak performance per application (e.g., skip costly memory model emulation)
- FEXConfig GUI: User-friendly interface to explore and change emulation settings
- Broad Compatibility: Supports both 32-bit and 64-bit x86 binaries
- FEX-Emu: x86/x86_64 emulator for ARM64 with binfmt support
- FEX RootFS: Ubuntu 24.04 x86_64 root filesystem (SquashFS, ~843MB)
- Ubuntu 24.04 ARM64: Minimal base image for ARM64 hosts
Optimized using multi-stage builds and minimal dependencies:
- Content Size: ~1.05GB
- Disk Usage: ~2.53GB
docker-compose up -d
docker exec -it fex-emulator /bin/bashdocker pull stevenlafl/fex:latest
docker run -it --rm stevenlafl/fex:latestdocker build -t stevenlafl/fex:latest .The container starts with FEXBash by default, providing an x86 emulated environment:
docker run -it --rm stevenlafl/fex:latest# Inside FEXBash (default), binaries run automatically in emulated environment:
docker run -it --rm -v /path/to/x86/app:/app stevenlafl/fex:latest
cd /app && ./your-x86-binary
# To run a specific binary directly, use FEX:
docker run -it --rm -v /path/to/x86/app:/app stevenlafl/fex:latest FEX /app/your-x86-binaryThis Dockerfile is optimized for minimal image size:
- Multi-stage build - Build dependencies don't bloat final image
- --no-install-recommends - Prevents unnecessary package suggestions
- Layer cleanup - Aggressive removal of apt cache, temp files
- Auto-remove dependencies - Purges build tools after use
- SquashFS RootFS - 577MB smaller than EROFS format
The image includes several FEX utilities:
-
FEX - Main emulator executable for running x86/x86_64 programs
FEX /path/to/x86-binary
-
FEXInterpreter - Deprecated alias for FEX (backwards compatibility)
-
FEXConfig - Qt-based GUI for configuring emulation settings
-
FEXBash - Starts a bash instance running under emulation
FEXBash
Note: This is not a chroot! Don't use
sudoinside this environment. -
FEXMountDaemon - Background mount daemon for SquashFS-based rootfs
- Usually one instance runs at a time
- Closes when FEX exits (with 10-second timeout window)
- Automatically managed; manual intervention rarely needed
The image uses the official FEX Ubuntu 24.04 x86_64 RootFS:
- Type: SquashFS (compressed filesystem)
- Location:
~/.fex-emu/RootFS/Ubuntu_24_04.sqsh - Source: https://rootfs.fex-emu.gg/
- Purpose: Provides x86_64 system libraries for emulated binaries
The image includes fex-emu-binfmt32 and fex-emu-binfmt64 for transparent x86/x86_64 binary execution on ARM64 hosts.
This Docker configuration is provided as-is. FEX-Emu and included components have their own licenses.