这是我们调查的总结。
用于构建的基本映像是
i386/ubuntu
但是,在32位环境中,此图像不会适当地屏蔽
uname(2)
打电话给
setarch linux32
作为入口点),因此,当在64位系统(您的情况)上运行时,构建容器中的任何进程都将调用
未命名(2)
或
uname(1)
看到
x86_64
而不是
i686
. 这就是问题的根源。
安装时
cargo
,您将下载并运行安装脚本,该脚本将检测运行它的平台并下载
rustup-init
. 此脚本中的平台检测正确地识别出它在32位环境中运行,但在64位内核上运行,因此该脚本下载32位版本的
RuSTUP初始化
. 然而,
RuSTUP初始化
决定继续
X86Y64
(可能它看到了
X86Y64
返回的
未命名(2)
,但不执行“64位内核上的32位环境”检查,就像安装程序脚本那样)。在安装过程中可以看到
-y
:
Current installation options:
default host triple: x86_64-unknown-linux-gnu
default toolchain: stable
modify PATH variable: yes
所以,
rustup
安装64位工具链,在调用
货物
运行结果
32位环境中的64位二进制文件
,所以你看到了错误。
我仍然感觉到一些不一致的行为,因为安装脚本和
RuSTUP初始化
是
parts of the same project
我不明白他们为什么要检测平台
不同地
在相同的环境中(为什么不能
RuSTUP初始化
就跟安装脚本一样聪明吧?).
正如@shepmaster注意到的,这是一个已知的问题(
Rustup installs 64bit compiler on a 32bit Docker instance
)有两种可能的解决方法:
-
通过传递
--default-host i686-unknown-linux-gnu
安装人员;
-
在下面运行安装程序
Setarch Linux32型
所以它的使命
未命名(2)
将看到
I166
而不是
X86Y64
.
就我个人而言,我会选择第一个选项,因为它似乎不那么老套。