我正在构建一个使用ruby的Docker镜像,并使用rvm
安装。如果我在Apple Silicon下使用docker buildx build --platform linux/amd64,linux/arm64 …
构建,并且在构建脚本中使用rvm install 2.7
,它会构建并安装ARM64版本,甚至在amd64映像中也是如此:
$ uname -a
Linux 628f228dda6f 4.14.22 #1 SMP Thu Oct 27 08:01:25 UTC 2022 Build-38 x86_64 GNU/Linux
$ file /home/foo/.rvm/rubies/ruby-2.7.8/bin/ruby
/home/foo/.rvm/rubies/ruby-2.7.8/bin/ruby: ELF 64-bit LSB pie executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, for GNU/Linux 3.7.0, BuildID[sha1]=e3ea67d64604f36deef9f6eb95cc99078337d287, with debug_info, not stripped
字符串
这个镜像显然不能在amd64硬件上运行ruby。
如何告诉rvm
安装amd64版本的Ruby?我尝试了ARCHFLAGS="$(uname -m)" rvm install 2.7
,但没有效果,设置rvm install 2.7 --arch x86_64
会导致gcc的编译错误。
1条答案
按热度按时间dly7yett1#
我的问题是,我的
Dockerfile
中有一个FROM --platform=$BUILDPLATFORM
,这迫使我使用Mac的(ARM64)架构对该阶段进行了一次构建。随后的构建阶段是多平台的,工作正常,但复制了ARM Ruby代码。