微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Docker buildx mulitarch armv6 我需要什么:到目前为止我得到了什么:编辑:

如何解决Docker buildx mulitarch armv6 我需要什么:到目前为止我得到了什么:编辑:

我需要什么:

在 x86_64 机器上用于 raspBerry pi zero 的测试容器,它与 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 图像。我不知道我是否需要对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 不熟悉,但我怀疑它的“平台”参数只是配置容器内的代码是用来运行的。所以你有一个装满 v6 二进制文件的容器,它可以在 v6 CPU 或 v7 CPU 上运行。

如果您确实需要强制 QEMU 模拟 v6 CPU 而不是 v7 CPU,您可以将环境变量 QEMU_CPU 设置为“arm1176”,这将使 QEMU 模拟该特定 CPU。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?