Когда вы создаете образ 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).
Только что добавил это, @BMitch
Есть ли способ передать переменную 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
Пожалуйста, включите минимальный воспроизводимый пример, включая Dockerfile, команду сборки и выполняемые команды, которые показывают обнаружение неправильной архитектуры.