如何解决“无法找到适用于 linux/arm64/v8 的匹配项”?

2024年10月11日 | 3 分钟阅读

无论何时,当您在基于 ARM 的 Linux 系统上使用 Docker 时,主要是在 Raspberry Pi 或 Apple 的 Silicon M1/M2 芯片上,您可能会遇到错误:“no matching manifest for linux/arm64/v8 in the manifest list entries。”当您尝试拉取 Docker 镜像但该镜像不包含对 ARM64 架构的支持时,会发生此错误消息。为了解决此问题,我们将在本文中提供几种解决方案,包括此错误的含义、发生原因以及如何解决它以确保在 ARM64 平台上顺利部署容器。

How to Resolve no matching manifest for linux/arm64/v8?

如果您在使用 Docker Compose 的 Apple M1 Silicon 芯片或 Raspberry PI 上遇到此错误消息 `no matching manifest for Linux/arm64/v8 in the manifest list entries`。

How to Resolve no matching manifest for linux/arm64/v8?

解决方案 1:使用平台

只需在 docker-compose.yml 文件中添加此平台,如下所示

完整代码

现在,在终端中使用以下命令运行上面的代码。

运行代码后,您将看到没有错误消息,并且您的 MySQL 将轻松接受连接。

解决方案 2

如果您正在使用预构建镜像,只需运行以下命令迁移您的数据库

命令

解决方案 3:使用多架构 Docker 镜像

有几个官方 Docker 镜像都是为多种架构构建的。您可以尝试拉取一个精确支持 ARM64 架构的镜像。

  • 检查您尝试拉取的镜像的 Docker Hub 页面,查看它是否具有 ARM64 版本。
  • 如果可用,使用给定代码拉取镜像

在上面的命令中,将 <image-name> 替换为您实际的镜像名称。

解决方案 4:在本地创建镜像

如果您尝试使用的镜像不支持 ARM64,您可以在 ARM64 系统上从源代码构建它。

  • 首先,克隆存储库或获取镜像的 Dockerfile。
  • 进入 Dockerfile 所在的目录。
  • 现在,通过运行以下命令构建镜像

在上面的命令中,将 <your-image-name> 替换为您实际的镜像名称。

解决方案 5:使用 Docker Buildx

Docker Buildx 是一个强大的工具,使用它可以轻松构建用于不同平台的镜像。您可以使用它来构建和推送多架构镜像。

使用以下命令确保 Buildx 已启用

现在,借助以下命令构建镜像

在上面的命令中,将 <your-image-name> 替换为您实际的镜像名称。

解决方案 6:使用替代镜像

有时基础镜像不支持 ARM64。在这种情况下,您可以寻找一个支持 ARM64 的类似镜像。

  • 在 Docker Hub 等平台上搜索与 ARM64 兼容的镜像
  • 搜索时使用“arm64”或“multi-arch”等关键字。
  • 验证存储库中镜像支持的平台。

解决方案 7:使用 QEMU 进行模拟

仅在绝对必要时使用此方法。如果上面提供的其他解决方案都不起作用,那么请使用此方法。如果您无法找到或构建 ARM64 镜像,您可以使用 QEMU 模拟其他架构,例如 x86_64。但是,此方法不利于系统性能,但可以作为最后一种选择。

  • 首先,在您的系统上安装 QEMU。
  • 然后,通过运行以下命令在 Docker 中启用 QEMU

运行上述命令后,再次尝试运行 Docker 容器。

结论

总而言之,“no matching manifest for linux/arm64/v8”错误发生在 Docker 镜像不支持 ARM64 架构时。要解决此问题,您可以拉取多架构镜像、在本地为 ARM64 构建镜像,或使用 Docker Buildx 进行跨平台构建。另外,您可以找到与 ARM64 兼容的镜像,或在必要时使用 QEMU 进行模拟。通过遵循这些方法,您可以确保 Docker 容器在基于 ARM 的 Linux 系统上顺利运行。