如何在 arm64 主机平台上运行 amd64 docker 镜像

Posted

技术标签:

【中文标题】如何在 arm64 主机平台上运行 amd64 docker 镜像【英文标题】:how to run amd64 docker images on arm64 host platform 【发布时间】:2021-07-31 03:49:35 【问题描述】:

我有一个 m1 mac,我正在尝试在基于 arm64 的主机平台上运行一个基于 amd64 的 docker 映像。但是,当我尝试这样做(使用 docker run)时,出现以下错误:

WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested. 

当我尝试添加标签--platform linux/amd64 时,错误消息没有出现,但我似乎无法进入相关的shell,docker ps -a 显示容器在启动时立即退出。考虑到情况/如何使--platform 标签起作用,有人知道我如何在我的机器上运行这个精确的图像吗?

【问题讨论】:

【参考方案1】:

使用--platform 是正确的。在我的 M1 Mac 上,我能够从 Docker Hub 运行 arm64 和 amd64 版本的 Ubuntu 映像。 uname提供的机器硬件名称就是证明。

# docker run --rm -ti --platform linux/arm/v7 ubuntu:latest uname -m
armv7l

# docker run --rm -ti --platform linux/amd64 ubuntu:latest uname -m
x86_64

运行 amd64 图像由 Rosetta2 仿真启用,如 here 所示。

并非所有映像都可用于 ARM64 架构。您可以添加--platform linux/amd64 以在仿真下运行英特尔映像。

如果容器立即退出,那是您使用的特定容器有问题。

【讨论】:

非常感谢您的最后一部分 - 我只想使用预制的 Docker 容器进行开发,不要关心它不会那么快,只是想让它工作。谢谢你告诉我如何强制它。 我怎样才能让它与 docker-compose up 一起工作? @OamarKanji 只需在您的 Compose 文件中添加 platform: linux/amd64

以上是关于如何在 arm64 主机平台上运行 amd64 docker 镜像的主要内容,如果未能解决你的问题,请参考以下文章

平台及架构

.NET Core 服务在 ARM64 服务器中的部署

强制 docker 在 macOS 上默认使用 linux/amd64 平台

AMD 64 位双核优化

如何在ARM64中实现系统调用?

[Linux]arm| amd | X86 | aarch64 [转]