为什么在外部架构上运行时,需要在 Docker 容器内使用 qemu 静态二进制文件?



我有一个Fedora 26工作站和一个Ubuntu 16.04服务器。在前者上,我可以在安装了qemu-user-static的情况下运行docker run -it --rm arm32v7/python:3.6.2-slim /bin/sh但是当我尝试在 Ubuntu 上运行它时,我得到:

standard_init_linux.go:178: exec user process caused "no such file or directory"

我可以通过添加-v /usr/bin/qemu-arm-static:/usr/bin/qemu-arm-static来解决此问题。让我感到困惑的是,我不需要在Fedora上这样做。为什么?有什么方法可以在 Ubuntu 上实现相同的目标吗?

为了在本地执行 arm 代码,您应该在 binfmt_misc 中有一个活动条目

$ cat /proc/sys/fs/binfmt_misc/qemu-arm
enabled
interpreter /usr/bin/qemu-arm-static
flags: OC
offset 0
magic 7f454c4601010100000000000000000002002800
mask ffffffffffffff00fffffffffffffffffeffffff

检查您的 Fedora 和 Ubuntu 配置是否不同

这在Ubuntu(16.04 或 18.04(上不起作用的主要原因是因为这些发行版在 binfmt 支持文件中默认没有打开"固定二进制"标志。此外,Ubuntu 16.04 需要来自新硬件支持堆栈的较新内核。

这个存储库帮助我轻松地修复了 Ubuntu 上的 binfmt 配置。

最新更新