Getting RustDesk x64 and Unifi Controller x86 on Raspberey Pi

I’d like to run RustDesk which requires an x64 OS on my Pi 3B+ but the OS is x86 because I’m running UniFi Controller, which requires and old version of the MongoDB, which requires x86 OS.

Is there a way to run x86 and x64 containers on the Pi? I realise that one of the containers would need a full OS installed but not sure if you can do that like you can in a VM.

Any insight would be fantastic.

Cheers

I moved your topic from the “Tips & HowTos” to general, as it is reserved for sharing content you created yourself, not for asking for Tips & HowTos.

@starkaas Have you used QEMU? You can use QEMU (Quick Emulator) to run x86 containers on ARM-based Raspberry Pi. QEMU is an emulator that allows you to run a different architecture on an ARM machine. You can create a virtual machine using QEMU and install a full x86 OS inside it. Then, you can run the x86 Docker container inside the virtual machine.

Keep in mind that emulating x86 on an ARM device can be slow and resource-intensive, so it may not be suitable for running applications that require high performance.

You might find this blog useful Running Arm-based Docker Image on non-Arm Platform using Emulator – Collabnix

Also, it is important to note that In Compose version V2.11.0, we introduced the ability to add platforms in the build section and let Compose do a cross-platform build for you. The following Dockerfile logs the name of the service, the targeted platform to build, and the platform used for doing this build:‘’’

FROM --platform=$BUILDPLATFORM golang:alpine AS build
 
ARG TARGETPLATFORM
ARG BUILDPLATFORM
ARG SERVICENAME
RUN echo "I am $SERVICENAME building for $TARGETPLATFORM, running on $BUILDPLATFORM" > /log
 
FROM alpine
COPY --from=build /log /log

This Compose file defines an application stack with two services (A and B) which are targeting different build platforms:

services:
 serviceA:
   image: build-test-platform-a:test
   build:
     context: .
     args:
       - SERVICENAME=serviceA
     platforms:
       - linux/amd64
       - linux/arm64
 serviceB:
   image: build-test-platform-b:test
   build:
     context: .
     args:
       - SERVICENAME=serviceB
     platforms:
       - linux/386
       - linux/arm64

Be sure to create and use a docker-container build driver that allows you to build multi-arch images:

docker buildx create --driver docker-container --use

To use the multi-arch build feature:

	
> docker compose build --no-cache
1 Like

Thank you very much for your reply.

I’m very early into my linux journey, and at the beggining of my docker one. A lot of this does make sense though.

I already have the Pi running x86 so I could do the reverse? Hopefully the performamce impact woid be negligible for RustDesk.

It will take some time for me to get my head around this. And sadly I can’t get my hands on a Pi 4 here in Australia without paying ridiculous prices. And not that keen to setup the 3 again.

1 Like