Arm64 VPS and VDS: getting started and software compatibility
Start on a 64-bit Arm server: check the architecture, install arm64 packages and container images, run x86-only images with emulation, fix exec format errors.
- Beginner
- 15 min read
- Updated
On this page
An Arm64 VPS or Arm64 VDS is a virtual server with 64-bit Arm (AArch64) processors and full root access. You connect, secure and manage it exactly like any other Linux server (connect over SSH, secure a new Linux server). The difference is the processor architecture: every program you run must be built for arm64. This guide shows how to check that and what to do when software exists only for x86.
Before you start
- An Arm64 VPS or VDS with one of the operating systems listed in the order form, and SSH access as root or a
sudouser.
Step 1: Check the architecture
uname -m
dpkg --print-architectureOn Ubuntu and Debian you see aarch64 and arm64. On AlmaLinux and Rocky Linux, uname -m also prints aarch64.
Step 2: Install software
- Distribution packages come from the arm64 repositories automatically:
sudo apt install nginxinstalls the arm64 build. - Vendor downloads: pick the file marked
arm64,aarch64orlinux-arm64, notamd64,x86_64orx64. - Language runtimes such as Node.js, Python, Go, Java, .NET, PHP and Rust are available for arm64. Packages with native code (Python wheels, Node add-ons) need an arm64 build or are compiled during installation, which needs build tools:
sudo apt install build-essential.
Verify a binary before you rely on it:
file /usr/local/bin/mytoolThe output names ARM aarch64 for a native arm64 binary.
Step 3: Use Docker with arm64 images
Install Docker Engine from Docker's repository exactly as on x86 (install Docker on Ubuntu); Docker publishes arm64 packages. Check which platforms an image is published for:
docker buildx imagetools inspect nginx:latestThe list shows entries such as linux/amd64 and linux/arm64. If linux/arm64 is listed, docker pull picks it automatically.
Step 4: Run amd64-only images with emulation (when you must)
For an image that exists only for amd64, register QEMU emulators with the kernel, then ask for the platform explicitly:
docker run --privileged --rm tonistiigi/binfmt --install all
docker run --rm --platform linux/amd64 alpine uname -mThe second command prints x86_64 from inside an emulated container. Emulation works for occasional tools and build steps, but it is much slower than native code; for anything that runs all day, use an arm64 image or rebuild it (multi-architecture Docker images).
The emulator registration does not survive every reboot on all systems; run the first command again if amd64 containers stop starting after a restart.
Arm64 VDS: your own virtual machines
An Arm64 VDS adds nested virtualization. KVM on it runs 64-bit Arm guests; use arm64 images for them, such as Ubuntu's arm64 cloud image, and the Arm system emulator package (qemu-system-arm) together with UEFI firmware for Arm guests (qemu-efi-aarch64 on Ubuntu and Debian). The libvirt workflow is the same as in KVM virtual machines with libvirt.
Troubleshooting
exec format error. You started a binary or container built for another architecture. Check it with file (binaries) or docker image inspect --format '{{.Architecture}}' image (images), then install the arm64 build.
no matching manifest for linux/arm64/v8 in the manifest list entries. The image has no arm64 variant. Look for an alternative image, build your own, or run it with emulation as in Step 4.
pip install compiles for a long time or fails. No arm64 wheel exists for that package version, so pip builds it from source. Install build-essential and the -dev packages the error names, or choose a version that ships arm64 wheels.
A vendor's install script stops with "unsupported architecture". The vendor publishes no arm64 build. Ask the vendor, or run that component on an x86 server.
Next steps
- Build images for both architectures: multi-architecture Docker images.
- Lock the server down: secure a new Linux server.
Frequently asked questions
Are Arm64, AArch64 and ARM64 the same?
Yes. AArch64 is Arm's name for the 64-bit execution state, Linux reports aarch64 in uname -m, and Debian, Ubuntu and Docker call the same architecture arm64.
Will my Docker images run?
Official and popular images are usually published for several architectures, and Docker pulls the arm64 variant automatically. Images published only for amd64 need emulation or a rebuild for arm64.
Can I run x86 programs?
Not natively. Containers built for amd64 can run through QEMU emulation, which is fine for occasional tools but much slower than native code. For production, use arm64 builds or an x86 server.
What does an Arm64 VDS add?
Nested virtualization: you can run 64-bit Arm virtual machines of your own inside the server, for example a clean VM for every build.