我有一台amd64 linux机器,用于构建arm32v7容器。当docker build
遇到第一个RUN命令时,它将出现以下错误:
standard_init_linux.go:207: exec user process caused "no such file or directory"
通过在amd64 linux主机上运行docker run -it arm32v7/ubuntu:xenial
,可以很容易地在没有docker文件的情况下重现此内容。
我在其他地方也看到过这种抱怨,但是大多数建议是您需要在arm32v7主机上构建一个arm32v7容器。这是不切实际的。
我在Ubuntu 19.04和18.10上成功添加了一些架构仿真:
sudo apt-get install -y qemu qemu-user-static qemu-user binfmt-support
添加这些软件包后,错误消失了,我可以创建我的arm32v7容器。
但是,这对于Ubuntu 18.04或16.04而言无效。
是否有一个适用于所有地方的通用解决方案?
答案 0 :(得分:1)
在Ubuntu 18.04和16.04上似乎有一些安装后步骤失败了。
有两种解决方法可以解决18.04和16.04上的问题。
方法1:
git clone https://github.com/computermouth/qemu-static-conf.git
sudo mkdir -p /lib/binfmt.d
sudo cp qemu-static-conf/*.conf /lib/binfmt.d
sudo systemctl restart systemd-binfmt.service
方法2:
sudo mkdir -p /lib/binfmt.d
sudo sh -c 'echo :qemu-arm:M::\\x7fELF\\x01\\x01\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x00\\x28\\x00:\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\xfe\\xff\\xff\\xff:/usr/bin/qemu-arm-static:F > /lib/binfmt.d/qemu-arm-static.conf'
sudo sh -c 'echo :qemu-aarch64:M::\\x7fELF\\x02\\x01\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x00\\xb7\\x00:\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\xfe\\xff\\xff\\xff:/usr/bin/qemu-aarch64-static:F > /lib/binfmt.d/qemu-aarch64-static.conf'
sudo systemctl restart systemd-binfmt.service
答案 1 :(得分:0)
这行得通,但这是一个不必要的层。我在 U18.04 上用 QEMU 做了很多,只需要做一次,因为最近的内核包含 binfmt_misc
模块(没有服务层)。
请注意,我最近构建了自己的 QEMU,因为 Debian/Ubuntu 发行版有一个非常旧的版本(我记得是 2.x)。维护者遗漏的一个关键是 --fix-binary yes
字段。
为 aarch64 安装魔法 ELF 映射:
QEMU_AARCH64_EXEC=/opt/distros/qemu-5.1.0/bin/debug/native/aarch64-linux-user/qemu-aarch64
sudo update-binfmts \
--package qemu-user-static \
--install qemu-aarch64 $QEMU_AARCH64_EXEC \
--magic '\x7f\x45\x4c\x46\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7\x00' \
--mask '\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff' \
--offset 0 \
--credential yes \
--fix-binary yes
update-binfmts --display | grep 'qemu-aarch64 ' -A 7
删除映射:
sudo update-binfmts --package qemu-user-static --remove qemu-aarch64 $QEMU_AARCH_EXEC
update-binfmts --display