问题描述
购买新的 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 的每一行现在都是已知的,对我有用。