首页 > 解决方案 > Docker 在 mac 上运行 armv7 镜像

问题描述

我的 mac 使用 x86_64 硬件,理论上我不应该能够运行为 armv7 构建的 docker 映像。

然而

Docker 文档说:

Docker Desktop 提供 binfmt_misc 多架构支持,这意味着您可以为不同的 Linux 架构运行容器,例如 arm、mips、ppc64le,甚至 s390x。

这不需要容器本身的任何特殊配置,因为它使用 Docker for Mac VM 中的 qemu-static。

而且我也在阅读类似这样的文章,这些文章证实了上述内容
docker run -it --rm arm32v7/debian /bin/bash

应该在mac上工作,虽然它对我不起作用:

Unable to find image 'arm32v7/debian:latest' locally
latest: Pulling from arm32v7/debian
Digest: sha256:9b61eaedd46400386ecad01e2633e4b62d2ddbab8a95e460f4e0057c612ad085
Status: Image is up to date for arm32v7/debian:latest
docker: Error response from daemon: image with reference arm32v7/debian was found but does not match the specified platform cpu architecture: wanted: amd64, actual: arm.
See 'docker run --help'.

我想知道我是否误会了什么。

Docker桌面社区版本2.4.2.0(48975)edge
Docker版本20.10.0-beta1,构建ac365d7
MacOS版本10.15.7(19H2)

注意:在研究该主题时,我尝试使用 qemu 并运行:
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
这可能会干扰默认行为。

标签: macosdockerx86-64

解决方案


我认为我的问题与这个 moby 问题有关。

修复非常简单,因为我只需要添加--platform参数,在我的情况下linux/armlinux/arm/v7:
docker run -it --rm arm32v7/debian /bin/bash
已成为
docker run --platform=linux/arm -it --rm arm32v7/debian /bin/bash

瞧:

root@82c3ff8752d3:/# uname -a
Linux 82c3ff8752d3 5.4.39-linuxkit #1 SMP Fri May 8 23:03:06 UTC 2020 armv7l GNU/Linux

推荐阅读