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

Ubuntu 为什么在外部体系结构上运行时,Docker容器中需要qemu静态二进制文件?,ubuntu,docker,arm,fedora,qemu,Ubuntu,Docker,Arm,Fedora,Qemu,我有一个Fedora26工作站和一个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 a

我有一个Fedora26工作站和一个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
来解决这个问题。让我困惑的是,我不需要用软呢帽来做这件事。为什么呢?有什么方法可以用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配置是否不同

为了本机执行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配置。

这在Ubuntu(16.04或18.04)上不起作用的主要原因是这些发行版在binfmt支持文件中默认没有“fixed binary”标志。此外,Ubuntu 16.04需要一个新的硬件支持堆栈中的更新内核


帮助我轻松修复Ubuntu上的binfmt配置。

我还不知道为什么会有这种差异,但看看这个url,它看起来是必要的是的,但我的主要问题是“如何使用Docker官方Fedora存储库安装的Docker在Fedora上工作”。目前,我不得不将qemu静态二进制文件复制到项目目录,这完全破坏了简单的“docker compose up”方法,需要使用Makefile或类似的方法。我还不知道为什么会有这种差异,但看看这个url,它看起来是必要的是的,但我的主要问题是“使用从Docker官方Fedora存储库安装的Docker,这在Fedora上是如何工作的”。目前,我必须将qemu静态二进制文件复制到项目目录中,这完全破坏了简单的“Docker compose-up”方法,并需要使用Makefile或类似文件。