我正在尝试在x86计算机上基于ARMv7容器运行Docker镜像。根据此site,可以通过首先运行此容器来实现。
docker run --rm --privileged hypriot/qemu-register
该命令在Mac OS X和Ubuntu 19虚拟机(带有Windows 10主机)上均可使用。但是,当我尝试在CentOS 7和AWS A1 instances之一上运行时,收到消息
standard_init_linux.go:211: exec user process caused "exec format error"
。 CentOS 7的CPU是Intel Core i7-8700K,AWS A1是基于Graviton processor的。有人知道我在这里想念的吗?
AWS A1实例的投诉是安装miniconda。我不确定是否有办法说"is"(继续安装),因为
-b
标志应该已经使miniconda静默安装了。步骤6/11:运行/ bin / bash /tmp/miniconda.sh -b -p / opt / miniconda
--->在ab9b5fef6837中运行
警告:
您的处理器似乎不是armv7l。这个软件
是为运行树莓Wheezy的Raspberry Pi 2专门构建的
(或更高)。
确定要继续安装吗? [是|否]
[否] >>>中止安装
最佳答案
AWS A1实例确实支持运行Armv7二进制文件。使用适用于A1的可用Ubuntu 18.04 AMI,在命令行上运行此命令:
cat /boot/config-4.15.0-1043-aws | grep "CONFIG_COMPAT=y"
如果成功,则说明AMI和内核已构建为支持在64位平台上运行32位可执行文件。要测试此功能,请使用
apt-get install gcc:armhf libc6:armhf
进行安装以获得最小的32位构建环境,创建可执行文件并在其上执行readelf -h
。您应该看到计算机列为ARM,而不是AArch64。执行也应该成功。使用armv7镜像测试docker也可以在A1的Ubuntu 18.04 AMI上直接使用。我通过
docker pull armhf/ubuntu:latest
测试,然后使用bash进入交互模式并尝试安装Miniconda3。问题似乎与上面链接的Miniconda安装脚本有关。它在第58行无条件地尝试此操作:if [[ `uname -m` != 'armv7l' ]]; then
echo -n "WARNING:
Your processor does not appear to be an armv7l. This software
was sepicically build for the Raspberry Pi 2 running raspbian wheezy
(or above).
Are sure you want to continue the installation? [yes|no]
[no] >>> "
read ans
if [[ ($ans != "yes") && ($ans != "Yes") && ($ans != "YES") &&
($ans != "y") && ($ans != "Y") ]]
then
echo "Aborting installation"
exit 2
fi
fi
Docker不对
uname -m
返回的内容进行任何重写,它将在A1实例上看到AArch64并将跳到那里。注释掉此阻止将使您继续使用A1实例。为了使其在x86笔记本电脑上正常工作,您需要将
qemu-arm-static
复制到docker镜像以启用仿真。我不确定,但我怀疑uname
仍无法返回Miniconda期望的正确机器类型。关于amazon-web-services - 在x86桌面上运行使用ARMv7基本镜像构建的Docker镜像时出现问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57174270/