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



一个以前工作的(在linux上)dockerized项目在我的新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中添加命令更新qemuRUN apk add --update qemu-x86_64
  • 将base alpine节点映像更新到最新版本
  • 启用docker桌面的实验特性
  • 从docker桌面我可以看到图像是模拟arm64架构的。我在Dockerfile中删除了"from arm64"平台说明符,在docker撰写文件中删除了类似的平台覆盖,然后我可以构建一个没有amd64标签运行的应用程序映像。然而,它仍然得到相同的问题和失败。
  • 尝试使用普通节点(node14)基础映像

分享,以帮助他人和节省时间:最后,工作是将我的基本图像从mhart/alpine-node:16更改为非阿尔卑斯基于图像node:16.18.1-alpine3.15。有一部分节点映像被标记为M1 (arm64)体系结构。

我首先尝试了最新的19.1.0-alpine,它解决了上面的qemu失败,但与我的应用程序不兼容,所以选择了一个v16版本,它是-和问题解决了。

如果在类似的情况下,我建议尝试找到任何可能已经用arm64架构构建的新映像,甚至可能改变(就像我的情况一样)您的基本映像并调整Dockerfile(缺少的增量)以使其工作。

最新更新