Как выполнить сборку docker buildx для ARM v6 на эмулируемых платформах QEMU, которые представляются в контейнере сборки как Arm7l?

Когда вы создаете образ Docker с помощью docker buildx build и указываете «--platform=linux/arm/v6», контейнер сборки запускается как arm7l, а не как ожидаемый arm6l, что создает проблемы, если процесс сборки предполагает, что наблюдаемая архитектура ЦП является фактической целью. .

$ docker run -it --rm --platform linux/arm/6 debian /bin/arch
armv7l

При запуске образа Docker можно установить для переменной среды QEMU_CPU значение Arm1176, как показано ниже:

$ docker run -it --rm --platform linux/arm/v6 -e QEMU_CPU=arm1176 debian /bin/arch 
armv6l

В результате получается armv6l, но с docker build это кажется невозможным. Установка переменной QEMU_CPU перед запуском docker buildx build не окажет никакого влияния на контейнер сборки, и он по-прежнему будет идентифицировать архитектуру ЦП как armv7l.

Есть ли способ передать переменную QEMU_CPU в контейнер сборки?

Добавлена ​​информация:

Файл Dockerfile, в котором наблюдалась проблема, находится по адресу https://github.com/rbanffy/hercules-base/blob/6f16b9832465dc0de02841d94e91c4089cb6f586/Dockerfile

Он сообщает о внутренней наблюдаемой архитектуре, а также о цели, полученной из расширения Docker buildx.

Точная команда, которая демонстрирует проблему:

docker buildx build -t rbanffy/hercules-base:latest-armv6 --platform=linux/arm/v6 --progress=plain .

В выводе компоновщика можно увидеть:

#8 0.712 TARGETPLATFORM is 'linux/arm/v6'
#8 0.717 TARGETARCH is 'arm'
#8 0.783 arch returns armv7l

Показано, что TARGETPLATFORM и TARGETARCH переданы правильно, а QEMU_CPU — нет (в результате чего эмулируется Armv7l).

Пожалуйста, включите минимальный воспроизводимый пример, включая Dockerfile, команду сборки и выполняемые команды, которые показывают обнаружение неправильной архитектуры.

BMitch 26.05.2024 13:49

Только что добавил это, @BMitch

rbanffy 06.06.2024 16:57
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
1
2
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Есть ли способ передать переменную QEMU_CPU в контейнер сборки?

Вы можете использовать аргумент сборки.

FROM debian

ARG QEMU_CPU
RUN /bin/arch >/arch.build
CMD cat /arch.build
$ docker buildx build -t test-arg --platform linux/arm/v6 --load .
[+] Building 5.7s (7/7) FINISHED                                                                         
 => [internal] load build definition from df.build-arg                                              0.0s
 => => transferring dockerfile: 113B                                                                0.0s
 => [internal] load metadata for docker.io/library/debian:latest                                    0.4s
 => [internal] load .dockerignore                                                                   0.0s
 => => transferring context: 49B                                                                    0.0s
 => [1/2] FROM docker.io/library/debian:latest@sha256:fac2c0fd33e88dfd3bc88a872cfb78dcb167e74af616  4.3s
 => => resolve docker.io/library/debian:latest@sha256:fac2c0fd33e88dfd3bc88a872cfb78dcb167e74af616  0.0s
 => => sha256:ec3129b1f3b893a7412a0ac12044f811ed32ddf7028d374141819005f9d4699f 47.34MB / 47.34MB    3.2s
 => => extracting sha256:ec3129b1f3b893a7412a0ac12044f811ed32ddf7028d374141819005f9d4699f           1.0s
 => [2/2] RUN /bin/arch >/arch.build                                                                0.3s
 => exporting to docker image format                                                                0.5s
 => => exporting layers                                                                             0.2s
 => => exporting manifest sha256:158dccb11a903279aa2674f5f5b05d34306523c3e6dde9a562918dd5d98dc4a7   0.0s
 => => exporting config sha256:8016e60dac3fcf86203f639ecd26521546548de04523bbc6cd07e91867862544     0.0s
 => => sending tarball                                                                              0.3s
 => importing to docker                                                                             0.1s

$ docker run test-arg
WARNING: The requested image's platform (linux/arm/v6) does not match the detected host platform (linux/amd64/v3) and no specific platform was requested
armv7l

$ docker buildx build -t test-arg --build-arg QEMU_CPU=arm1176 --platform linux/arm/v6 --load .
[+] Building 1.0s (7/7) FINISHED                                                                         
 => [internal] load build definition from df.build-arg                                              0.0s
 => => transferring dockerfile: 113B                                                                0.0s
 => [internal] load metadata for docker.io/library/debian:latest                                    0.2s
 => [internal] load .dockerignore                                                                   0.0s
 => => transferring context: 49B                                                                    0.0s
 => CACHED [1/2] FROM docker.io/library/debian:latest@sha256:fac2c0fd33e88dfd3bc88a872cfb78dcb167e  0.0s
 => => resolve docker.io/library/debian:latest@sha256:fac2c0fd33e88dfd3bc88a872cfb78dcb167e74af616  0.0s
 => [2/2] RUN /bin/arch >/arch.build                                                                0.1s
 => exporting to docker image format                                                                0.5s
 => => exporting layers                                                                             0.1s
 => => exporting manifest sha256:6f88ebac9603ab863e8542a73ae0b14d9819a46b823e4edd65fb9e4b72f929f6   0.0s
 => => exporting config sha256:79626453e3a5de575563d53541ae9fb7d9d5627907f8c102e9aa2059b0c87d43     0.0s
 => => sending tarball                                                                              0.3s
 => importing to docker                                                                             0.1s

$ docker run test-arg
WARNING: The requested image's platform (linux/arm/v6) does not match the detected host platform (linux/amd64/v3) and no specific platform was requested
armv6l

Другие вопросы по теме