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

时间:2017-07-31 13:53:07

标签: ubuntu docker arm fedora qemu

我有一个Fedora 26工作站和一个Ubuntu 16.04服务器。在前者上,我可以在安装docker run -it --rm arm32v7/python:3.6.2-slim /bin/sh的情况下运行qemu-user-static但是当我尝试在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实现同样的目标吗?

2 个答案:

答案 0 :(得分:0)

为了本地执行手臂代码,您应该在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配置是否不同

答案 1 :(得分:0)

此功能在Ubuntu(16.04或18.04)上不起作用的主要原因是,这些发行版默认情况下在binfmt支持文件中未启用“固定二进制”标志。此外,Ubuntu 16.04需要从新的硬件支持堆栈中获得更新的内核。

This repository帮助我轻松地在Ubuntu上修复binfmt配置。