我正在尝试在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/

10-11 06:38
查看更多