Запуск контейнера x86 на Raspberry c архитектурой arm64
У меня есть портированный контейнер, благополучно работающий на x86/amd64 серверах. Потребовалось мне засунуть его в другую железяку и решил я развернуть его на Raspberry. Якобы путь запуска контейнеров x86 на Raspberry есть. Взял Raspberry PI 4 с 8GB памяти и поставил убунту. Наставил qemu-system, qemu-user-static, kvm Якобы по тестам все типа хорошо:
root@ubuntu:/home/ubuntu# virt-host-validate
QEMU: Checking if device /dev/kvm exists : PASS
QEMU: Checking if device /dev/kvm is accessible : PASS
QEMU: Checking if device /dev/vhost-net exists : PASS
QEMU: Checking if device /dev/net/tun exists : PASS
QEMU: Checking for cgroup 'cpu' controller support : PASS
QEMU: Checking for cgroup 'cpuacct' controller support : PASS
QEMU: Checking for cgroup 'cpuset' controller support : PASS
QEMU: Checking for cgroup 'memory' controller support : PASS
QEMU: Checking for cgroup 'devices' controller support : PASS
QEMU: Checking for cgroup 'blkio' controller support : PASS
QEMU: Checking for device assignment IOMMU support : WARN (Unknown if this platform has IOMMU support)
QEMU: Checking for secure guest support : WARN (Unknown if this platform has Secure Guest support)
LXC: Checking for Linux >= 2.6.26 : PASS
LXC: Checking for namespace ipc : PASS
LXC: Checking for namespace mnt : PASS
LXC: Checking for namespace pid : PASS
LXC: Checking for namespace uts : PASS
LXC: Checking for namespace net : PASS
LXC: Checking for namespace user : PASS
LXC: Checking for cgroup 'cpu' controller support : PASS
LXC: Checking for cgroup 'cpuacct' controller support : PASS
LXC: Checking for cgroup 'cpuset' controller support : PASS
LXC: Checking for cgroup 'memory' controller support : PASS
LXC: Checking for cgroup 'devices' controller support : PASS
LXC: Checking for cgroup 'freezer' controller support : FAIL (Enable 'freezer' in kernel Kconfig file or mount/enable cgroup controller in your system)
LXC: Checking for cgroup 'blkio' controller support : PASS
LXC: Checking if device /sys/fs/fuse/connections exists : PASS
Запускаю контейнер следующим образом:
docker run -d --privileged --restart unless-stopped --hostname mycontainer --net=host --name=mycontainer -it mycontainer:v1 /bin/bash /entrypoint.sh
Он стартует, но не работает. Ошибки дает вообще непонятные. Не видел такого ранее.
Вычитал можно еще запускать контейнер внутри qemu контейнера:
root@ubuntu:/home/ubuntu# docker run --rm -it --device=/dev/kvm:/dev/kvm --device=/dev/net/tun:/dev/net/tun --cap-add NET_ADMIN -v /home/ubuntu/readyImages/adapter2_2.xz:/image jkz0/qemu:latest
WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
udhcpd: started, v1.30.1
udhcpd: max_leases=235 is too big, setting to 1
udhcpd: can't open '/var/lib/misc/udhcpd.leases': No such file or directory
kvm version too old
qemu-system-x86_64: failed to initialize KVM: Function not implemented
Но он возвращает вообще что-то непонятное. Гугление не помогает. Тема явно сложная и непонятная. Может кто-то сталкивался с чем-то подобным? Очень нужно направление для копания. Спасибо.