qemu:未捕获的目标信号 11(分段错误)- 更改为 M1 mac 后核心转储到 docker 容器中

问题描述 投票:0回答:2

之前(在 Linux 上)工作的 Docker 化项目在我的新 M1 mac 上构建正常,但在运行时失败并出现此错误:

qemu: uncaught target signal 11 (Segmentation fault) - core dumped

我知道这是由于不同的架构造成的(mac 是arm,linux 机器是amd),但不知道如何更改我的项目以使其工作。我该如何前进?

我的基础镜像是

mhart/alpine-node:16
,我正在运行 Node JS (TypeScript) 应用程序。

我尝试过的(因此为什么这不是重复)-阅读了许多类似的线程-但没有帮助:

  • 为 amd/64 (linux/intel arch) 构建,然后 Mac 应该虚拟化,但这并没有太大改变。
  • 向 Dockerfile 添加命令以更新 qemu
    RUN apk add --update qemu-x86_64
  • 将基础 alpine 节点镜像更新至最新版本
  • 在 docker 桌面中启用实验性功能
  • 从docker桌面我可以看到图像是模拟arm64架构的。我删除了 Dockerfile 中的“from arm64”平台说明符以及 docker compose 文件中的类似平台覆盖,然后我可以构建一个无需 amd64 标记即可运行的应用程序映像。然而,它仍然遇到同样的问题并且失败。
  • 尝试使用普通节点(node14)基础图像
node.js docker apple-m1 qemu apple-silicon
2个回答
2
投票

分享,以防对其他人有帮助并节省一些时间: 最后,有效的方法是将我的基本图像从

mhart/alpine-node:16
更改为基于 non-alpine 的图像
node:16.18.1-alpine3.15
。 有一段节点图像标记为 M1 (arm64) 架构。

我首先尝试使用最新的

19.1.0-alpine
,它解决了上述 qemu 故障,但与我的应用程序不兼容,因此选择了 v16 版本,并且问题得到了解决。

如果在类似的情况下,我建议尝试查找可能使用 arm64 架构构建的任何更新的映像,甚至可能更改(如我的情况)您的基础映像并调整 Dockerfile(以及缺少的内容的增量)以让它发挥作用。


0
投票

有类似的问题,你试过这个解决方案吗

© www.soinside.com 2019 - 2024. All rights reserved.