Я выпускаю двоичные файлы ARM моего программного обеспечения, запустив цепочку инструментов компилятора на эмулированной машине ARM.
Linux может запускать иностранные двоичные файлы, регистрируя qemu-user-static
в /proc/sys/fs/binfmt_misc/
. Это позволяет запускать образ Docker ARM32 или ARM64 на хосте Docker x86_64 следующим образом:
Приготовление:
# Apply `binfmt_misc` changes on host OS
docker run --rm --privileged multiarch/qemu-user-static:register --reset
Dockerfile:
# Get x86_64 qemu-user-static binaries
FROM debian:buster
RUN apt-get update && apt-get install -qqy qemu-user-static
# Get cross-arch rootfs
FROM arm64v8/golang:latest
COPY --from=0 /usr/bin/qemu-aarch64-static /usr/bin/qemu-aarch64-static
Это прекрасно работает в Docker для Linux.
Он также отлично работает в Docker для Windows при использовании контейнеров Linux (MobyLinuxVM
)
Это не не работает при использовании Docker для Windows при использовании контейнеров Windows (режим LCOW / hcsdiag
). Я хочу использовать этот режим, потому что он может работать как с контейнерами Linux, так и с Windows. Но невозможно изменить файл binfmt_misc
с помощью флага --privileged
:
C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Error response from daemon: Windows does not support privileged mode.
See 'C:\Program Files\Docker\Docker\Resources\bin\docker.exe run --help'.
В текущих (1803-х) версиях Hyper-V HCS используется настоящее ядро Linux, а не WSL. Я предполагаю, что должна быть возможность изменить директорию хоста binfmt_misc
.
Как можно запустить образ контейнера Linux / ARM на хосте Docker Windows / x86_64 с LCOW?
Можно ли изменить образ хоста Linux, используемый LCOW?
Есть ли другой способ получить унифицированный демон Docker, который может запускать образы Windows / x86_64, Linux / x86_64 и Linux / ARM Docker?