Запустите контейнер linux/arm через qemu binfmt_misc в Docker LCOW
Я выпускаю двоичные файлы 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 на хосте Windows/x86_64 Docker, работающем с LCOW?
Можно ли изменить образ хоста Linux, используемый LCOW?
Есть ли другой способ получить унифицированный демон Docker, способный запускать образы Windows/x86_64, Linux/x86_64 и Linux/ARM Docker?