我需要的是:
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我已经设置了qemu和binfmt,就像他们在github页面上说的那样:https://github.com/docker/buildx#building-multi-platform-images
我不明白为什么输出是armv7l,因为我做了一切工作来生成armv6l映像。我不知道我是否需要调整码头或qemu本身。我对码头的建造系统和如何模仿qemu下的集装箱非常陌生,所以如果有人能帮我解决这个问题,我将非常感激。
编辑:
多亏了Peter,容器才知道被迫使用armv6l。
docker run -e QEMU_CPU=arm1176 --platform=linux/arm/v6 --rm -t test/hello uname -mpi
Output: armv6l unknown unknown发布于 2021-02-09 11:35:43
uname告诉您'armv7l‘,因为您没有向QEMU指定它应该模仿任何特定的CPU类型,它的缺省值是“我们可以模仿的所有特性”。
这不应该是个问题,因为可以在v6 CPU上运行的所有软件都将在v7 CPU上运行。(这就是QEMU默认设置的原因:这意味着,一般来说,来宾程序都会正常工作。)
我不熟悉docker,但我怀疑它的“platform”参数只是简单地配置容器中的代码是用来运行的。因此,您有一个装满v6二进制文件的容器,它将在v6 CPU或v7二进制程序上运行。
如果确实需要强制QEMU模拟v6 CPU,而不是v7 CPU,则可以将环境变量QEMU_CPU设置为'arm1176',这将使QEMU模拟特定的CPU。
https://stackoverflow.com/questions/66116587
复制相似问题