运行 gem 在 Docker 上使用 Apple Silicon M1 安装捆绑程序时出现 Qemu 错误

Qemu error when running gem install bundler on Docker with Apple Silicon M1

当我 运行 docker-compose up 时出现以下错误

qemu: uncaught target signal 6 (Aborted) - core dumped

当 docker-compose 正在 运行 命令 bundle install

时会发生这种情况
 => ERROR [5/6] RUN bundle install --jobs 4 --path .bundle/                                                                                                                  4.2s
------
 > [5/6] RUN bundle install --jobs 4 --path .bundle/:
#10 4.170 Fetching gem metadata from https://rubygems.org/.[BUG] Segmentation fault at 0x0000418f81e2b0
#10 4.177 ruby 2.3.4p301 (2017-03-30 revision 58214) [x86_64-linux]
#10 4.177
#10 4.177 SEGV received in SEGV handler
#10 4.178 -- Control frame information -----------------------------------------------
#10 4.178 SEGV received in SEGV handler
#10 4.178 SEGV received in SEGV handler
#10 4.178 qemu: uncaught target signal 6 (Aborted) - core dumped
#10 4.192 Aborted
------
executor failed running [/bin/sh -c bundle install --jobs 4 --path .bundle/]: exit code: 134

根据 docker 的 github 上的这个 github 问题线程 – 它是一个与 qemu 相关的错误:

https://github.com/docker/for-mac/issues/5148#issuecomment-784992663

它提到 qemu 是上游组件 Docker 用于 运行M1 (arm64) 芯片上的英特尔 (amd64) 容器。我检查了 qemu repo fora 相关问题,但没有运气:

https://gitlab.com/qemu-project/qemu/-/issues?scope=all&utf8=%E2%9C%93&state=opened&search=uncaught+target+signal+6

在我的 docker-compose 文件中,我传递了以下配置,它帮助我修复了 docker 上的几个 M1 相关问题。但这不适用于这个特定问题。

web:
    platform: linux/amd64
    ...

此问题发生在以下环境中

我也在 qemu repo 上开了一个问题: https://gitlab.com/qemu-project/qemu/-/issues/340

关于如何解决这个问题有什么想法吗?

我发现了一个黑客。这是解决该特定问题的方法。我通过在 Dockerfile.yml 的顶部添加以下行来修复它,以更新可能已经过时的图像源

FROM ruby:2.3.4

如果您在使用其他库时遇到类似问题,我建议您在 Docker Hub https://hub.docker.com/ 上查找图像,并确保它们支持所需的架构:amd64 或 arm65等..


有关 qemu 错误的更多信息,您可以关注此 gitlab 问题线程:https://gitlab.com/qemu-project/qemu/-/issues/340