Docker buildx 多系统 armv6

Docker buildx mulitarch armv6

我需要的:

x86_64 机器上用于 raspberry pi 零的测试容器,它与 armv6l.

的 qemu 仿真一起使用

到目前为止我得到了什么:

带有测试代码的 Dockerfile

FROM python:3.7.9

COPY hello.py ./

CMD [ "python3", "./hello.py" ]

镜像是用这个命令构建的:

docker buildx build --platform linux/arm/v6 -t test/hello --push .

为 linux/arm/v6 上传和构建后,我尝试使用此命令 运行 它:

docker run --platform=linux/arm/v6 --rm -t test/hello uname -mpi 
Output: armv7l unknown unknown

我已经像他们在 github 页面上所说的那样设置了 qemu 和 binfmt: https://github.com/docker/buildx#building-multi-platform-images

我不明白为什么输出是 armv7l,因为我做了所有的事情来制作 armv6l 图像。我不知道是否需要对 docker 或 qemu 本身进行调整。 我对 docker 的 buildx 系统以及如何在 qemu 下模拟容器很陌生,所以如果有人能帮助我解决这个问题,我将不胜感激。

编辑:

感谢 Peter 容器知道被迫使用 armv6l。

docker run -e QEMU_CPU=arm1176 --platform=linux/arm/v6 --rm -t test/hello uname -mpi
Output: armv6l unknown unknown

uname 告诉你 'armv7l' 因为你没有指定 QEMU 它应该模拟任何特定的 CPU 类型,它的默认值是“我们可以模拟的所有功能”。

这应该不是问题,因为所有可以在 v6 CPU 上 运行 的软件都将在 v7 CPU 上 运行。 (这就是为什么 QEMU 的默认值是这样的:这意味着一般来宾程序都可以正常工作。)

我不熟悉 docker,但我怀疑它的 'platform' 参数只是配置容器内的代码构建到 运行 上。所以你有一个装满 v6 二进制文件的容器,它将 运行 在 v6 CPU 或 v7 上。

如果您确实需要强制 QEMU 模拟 v6 CPU 而不是 v7,您可以将环境变量 QEMU_CPU 设置为 'arm1176',这将使 QEMU 模拟具体 CPU.