Mac M1 Dokcer 拉取 arm64 镜像
刚入手Mac M1时,用Docker拉取镜像踩了不少坑——明明拉取成功的镜像,运行时却报“exec format error”,查了才知道是x86架构镜像不兼容arm64。折腾了大半天总结出一套流程,从基础配置到进阶校验全覆盖,不管是拉取官方镜像还是自定义镜像都能用。
Mac M1芯片是ARM架构,而很多早期Docker镜像只支持x86_64(amd64)架构,直接拉取会出现架构不兼容问题。
不过好在Docker对M1有完善的适配,核心是让Docker明确拉取“arm64/v8”架构的镜像
首先,需要先确认你的Docker版本支持M1:打开终端输入docker --version,
建议用Docker Desktop 4.0及以上版本,老版本可能存在架构识别bug。
如果版本过低,去官网下载最新版安装即可。
一、方式一:官方arm64镜像(推荐)
大部分官方镜像(如Ubuntu、Nginx、MySQL)已适配arm64架构,拉取时只需明确架构参数即可,避免Docker默认拉取amd64镜像。
比如拉取 mysql 的镜像,
mac@fiveyoboy home % docker pull mysql
Using default tag: latest
latest: Pulling from library/mysql
no matching manifest for linux/arm64/v8 in the manifest list entriesM1是 arm64 架构;而docker pull 默认拉取的是 amd64 的镜像
所以在拉取镜像时就需要指定架构: linux/x86_64
# 指定 arm64 架构的镜像
docker pull --platform linux/x86_64 mysql
# 指定 amd64 架构镜像
docker pull --platform linux/amd64 mysql注意⚠️:指定架构拉取的前提是:官方有基于该架构进行构建的镜像才能拉取成功,否则拉取会出现镜像不存在的情况,
先去Docker Hub确认镜像是否支持arm64,比如搜索“ubuntu”,在“Tags”页找到标注“arm64/v8”的标签,确认是否存在官方 arm64 镜像。
二、方式二、第三方非官方arm64镜像
如果官方没有 arm64 镜像,那么可以从镜像仓库查找“替代品”,现在很多第三方都会根据官方镜像镜像二次制作
三、方式三、本地构建arm64镜像
如果需要基于Dockerfile构建镜像,确保构建时指定arm64架构,避免生成amd64镜像。在Dockerfile所在目录执行:
# 构建时指定架构
docker build --platform arm64/v8 -t 自定义镜像名:标签 .
# 构建后推送至仓库(可选)
docker push 自定义镜像名:标签该方案不是很推荐,可能存在一些不可预知的问题…
⚠️:构建机需要是 M1 机器才行
常见问题
Q1:拉取时提示“no matching manifest for linux/arm64/v8”怎么办?
这是镜像不支持arm64架构的明确信号。先去Docker Hub搜索该镜像的“Tags”,看是否有“arm64”“aarch64”后缀的标签;
若没有,可替换为同类官方镜像(如用官方Nginx替代第三方定制版),或联系镜像作者提供arm64版本。
Q2:拉取arm64镜像后运行仍报“exec format error”?
大概率是镜像实际架构与标签不符。
解决办法:拉取时加上--platform=linux/arm64/v8(完整参数,避免简写),且确保Docker版本≥4.0。
因为 M1 芯片是新出的,很多镜像都还没支持(未来应该慢慢都有的~~~)
如果大家有特殊镜像的适配技巧,欢迎在评论区分享!!!
版权声明
未经授权,禁止转载本文章。
如需转载请保留原文链接并注明出处。即视为默认获得授权。
未保留原文链接未注明出处或删除链接将视为侵权,必追究法律责任!
本文原文链接: https://fiveyoboy.com/articles/mac-m1-docker-arm64-image/
备用原文链接: https://blog.fiveyoboy.com/articles/mac-m1-docker-arm64-image/