macos - Docker 在 mac 上运行 armv7 镜像
问题描述
我的 mac 使用 x86_64 硬件,理论上我不应该能够运行为 armv7 构建的 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
这可能会干扰默认行为。
解决方案
我认为我的问题与这个 moby 问题有关。
修复非常简单,因为我只需要添加--platform
参数,在我的情况下linux/arm
或linux/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
推荐阅读
- ruby-on-rails - 将哈希深度转换为平面路径数组
- angular - 如何在 UI AutoComplete 中使用表单控件 #1169
- javascript - 用长字符串索引 javascript 对象
- testing - 如何在 Cypress.io 中检查一个元素是否包含多个项目
- performance - 当 Non-Prod DB 大小相对非常小或与 Prod DB 大小不同时,如何在 Non-Prod 中进行性能测试?
- docker - RuntimeError:无法缓存函数'__jaccard':文件'/usr/local/lib/python3.7/site-packages/librosa/util/matching.py'没有可用的定位器
- iis - 在 IIS 上为服务器上托管的所有站点启用 CORS
- spring - 有谁知道 Spring MVC 中 Pivotal Cloud Cache 的技术入门,而不是 Springboot?
- reactjs - 如何在 Gatsby 中渲染来自 Contentful 的照片
- vue.js - 如何在 vue-cli3 生成的应用程序中使用 vue-sidebar-menu?