VS Code 创建 devcontainer 时如何获取 ARM Docker 镜像? (mac m1)

问题描述

购买新的 mac M1 后,我决定使用 Clone Repository in container Volume 功能重新安装现有的 vscode devcontainers。

它有点奏效,但后来,我立即注意到它非常缓慢、有问题,并且使用了 QEMU。

Docker M1 official Page 上阅读本文后:

然而,尝试在 Apple M1 机器上运行基于 Intel 的容器可能会崩溃,因为 QEMU 有时无法运行容器。因此,我们建议您在 M1 机器上运行 ARM64 容器。与基于 Intel 的容器相比,这些容器速度更快,占用的内存更少。

我知道我是在模拟下运行 Intel 映像,我不应该那样做。

为了构建这些容器,我从 MCR (here) 中挑选了图像。 在所有这些上,我注意到一个“x86-64”标签,没有提到 ARM。这是否意味着微软实际上没有提供官方的 ARM 镜像?

如果是这样,我应该如何使用 ARM 映像拥有干净的开发容器?我应该等待 MCR 更新吗?或者我应该选择其他图像,而不是微软的图像? 我错过了什么吗?


我正在使用:

  • VS 代码 1.54.1
  • Docker 桌面预览版 3.1.0 (60984)
  • Mac OS BigSur 11.2.1

解决方法

如果您需要特定的 MCR 容器,则需要等待它们可用于 arm64。

但是,如果您不需要特定的镜像,您可以在 Docker HUB 中找到大量为 arm64 构建的 Docker 镜像。您可以搜索arm64v8或搜索图片并检查是否显示arm64标签

在这两种情况下,您都可以尝试为 linux/arm64 平台架构提取任何映像,如下所示:

docker pull --platform linux/arm64 image

最后的选择是让您构建自己的映像。这可能很耗时,因为您可能需要将某些库移植到 arm64v8。

,

按照 jordanvrtanoski 的回答,

我决定使用与 arm64 本地兼容的官方 Docker 镜像。 在这两者之间,我意识到 MCR 图像没有任何疯狂或无法复制的东西。他们提供用于图像的基本模板here

因为我在我的容器中使用 root 用户,并且不需要很多额外的二进制文件,所以我从这些 MCR 映像中选择的唯一内容是自定义 bashrc 文件,以便在 ls cmd 上自定义提示和颜色,和别名。

一切都按预期工作,而且更清晰,因为我的 Dockerfile 的每一行现在都是已知的,对我有用。